AWK 用分号分隔大写字母和非大写字母的行,如果没有分号

问题描述 投票:0回答:1

我有这个转换后的字典可以在纯数据中使用。 它由一系列三件事组成:单词、发音、分号结束。 在转换后的字典中缺少一些分号,因此我希望使用 AWK 来查找缺失的部分并为我添加分号。 我以前使用过分隔符,但这个对我来说很难,所以任何帮助将不胜感激。 看文本文件:前3个是好的,后3个是错误的,最后少了一个分号,我认为AWK分隔符会在非大写字母和大写字母之间,如果有的话动作会加分号还没有分号。 我如何将其放入 AWK 代码中 预先感谢来自荷兰的 Dian

ELFKIN
Elf
kin;
ELFLAND
Elf
land
;
ELFLOCK
Elf
lock
;
ELGIN
El
gin
ELICIT
E
lic
it
ELICIT
E
lic
it

我之前使用过一些分隔符,但我不知道如何在AWK中指定之间。 所以Delimiter是非大写字母和大写字母,并在那里放一个分号。 所以有些代码看起来像这样 awk 'length($0)>1 && 全部大写的行在此行之前放置分号' 或者 awk '非大写的行,如果下一行是大写,则在行后放置分号 我试过这个

awk 'length($0>1) && /[:^, upper:]/{l=l";"}NR>1{print l}{l=$0}END{print l}' file2

这工作不好

或者我指向的是错误的方向。 谢谢,黛安

awk sed delimiter
1个回答
0
投票

使用

shell
Perl
Perl
就像类固醇上的
sed
,正则表达式很容易理解,它们很基本:

echo $(< file) |
    perl -pe 's/\s*;?\s*\b([A-Z]{2,})\b/;$1/g; s/;//; s/ +/\n/g; s/;/\n;\n/g'

ELFKIN
Elf
kin
;
ELFLAND
Elf
land
;
ELFLOCK
Elf
lock
;
ELGIN
El
gin
;
ELICIT
E
lic
it
;
ELICIT
E
lic
it
© www.soinside.com 2019 - 2024. All rights reserved.