尝试使用awk命令实现此规则:如果行不是以"O"开头|"或" A| "或" S| "我想删除前一行上的新行
我在输入中有这个文件(input.txt)
O|field1|field2
O|field1|
field2
A|field1|
field2
S|field1|
field2
O|field1|field2
O|field1|field2
O|field1|
field2
A|field1|
field2
S|field1|
field2
O|field1|field2
我想要这个输出
O|field1|field2
O|field1|field2
A|field1|field2
S|field1|field2
O|field1|field2
O|field1|field2
O|field1|field2
A|field1|field2
S|field1|field2
O|field1|field2
执行此代码
第一个月
它回来了
O|field1|field2O|field1|field2
A|field1|field2
S|field1|field2
O|field1|field2O|field1|field2O|field1|field2
A|field1|field2
S|field1|field2
O|field1|field2
有人能帮帮我吗?
8条答案
按热度按时间uqcuzwp81#
使用您显示的示例,请尝试以下
awk
代码。lndjwyie2#
这个
awk
应该适合您:voj3qocg3#
与测试字段值相比,测试记录布局的类似操作可能更适合您:
上面的代码使用GNU awk for multi-char RS来定义一个记录,它是由
|
s分隔的3个字段,并以换行符结尾,然后在打印之前删除每个记录中的任何换行符。l3zydbqr4#
您似乎只有缺少最后一个字段的问题。
如果
|
是字段分隔符,则可以检查第三个字段是否不为空并打印整行。如果字段1不是
A
O
或S
,则打印上一行和当前行产出
oprakyz75#
myzjeezk6#
另一种解决方案
将文件视为一个长流,并删除管道符后的换行符。
wkftcu5l7#
使用GNU
sed
:tgabmvqs8#
不如这样:
变量
l
表示我们正在构建的生产线。如果输入以特殊字符开头,则打印
l
(如果它不为空)。否则,开始构建行。END
在处理完所有行后运行,以打印出l
的最新版本。