Luc*_*a L 7 unix string awk data-manipulation
尝试使用 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
Run Code Online (Sandbox Code Playgroud)
我想要这个输出
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
Run Code Online (Sandbox Code Playgroud)
执行这段代码
awk '/^O\|/ || /^A\|/ || /^S\|/ {printf "%s", $0; next} 1 {print}' input.txt > output.txt
它返回
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
Run Code Online (Sandbox Code Playgroud)
有人可以帮我吗?
这awk应该适合你:
awk -F'|' 'NF==3 && $3 == "" {p = $0; next}
{print (NF == 1 ? p $1 : $0); p = ""}' file
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
Run Code Online (Sandbox Code Playgroud)