Jit*_*ria 1 unix linux shell awk
我有一个输入文件,其中包含一些记录,如下所示
input.txt中
Record|111|aaa|aaa|11|1-bb|bb|1111|cccc|cccc
Record|11|1-aaa|aaa|111|bb|bb|1111|cccc|cccc
Record|111|aaa|aaa|11|1-bb|bb|1111|cccc|cccc
Record|111|aaa|aaa|111|bb|bb|11|1-cccc|cccc
Record|22|aaa|aaa|222|bb|bb|2222|cccc|cccc|11|1-dddd|dd
Record|333|aaa|aaa|11|1-bb|bb|333|cccc|cccc
Record|11|1-aaa|aaa|102|bb|bb|1111|cccc|cccc
Run Code Online (Sandbox Code Playgroud)
我想用一个分隔符|11|中awk,并得到了第二场,我想下面的最常见的方式,
命令
awk -F'|11|' '{print $2}' input.txt
Run Code Online (Sandbox Code Playgroud)
产量
1|aaa|aaa|
|1-aaa|aaa|
1|aaa|aaa|
1|aaa|aaa|
|1-dddd|dd
|1-bb|bb|333|cccc|cccc
|1-aaa|aaa|102|bb|bb|
Run Code Online (Sandbox Code Playgroud)
预期产出
1-bb|bb|1111|cccc|cccc
1-aaa|aaa|111|bb|bb|1111|cccc|cccc
1-bb|bb|1111|cccc|cccc
1-cccc|cccc
1-dddd|dd
1-bb|bb|333|cccc|cccc
1-aaa|aaa|102|bb|bb|1111|cccc|cccc
Run Code Online (Sandbox Code Playgroud)
基本上它不考虑最后一个|分隔符|11|,而是采用分隔符|11.
我在下面尝试了所有,没有人给我预期的输出,
awk -F"|11|" '{print $2}' input.txt # gives wrong output
awk -F\|11\| '{print $2}' input.txt # gives Wrong output
awk -v FS='|11|' '{print $2}' input.txt # gives Wrong output
Run Code Online (Sandbox Code Playgroud)
最后我不得不用分隔符写一个for循环awk,|以使其工作,我想知道为什么简单的解决方案不起作用
争论-F是一个正则表达式.
awk -F "\\\|11\\\|" '{print $2}' file
Run Code Online (Sandbox Code Playgroud)
要么
awk -F '\\|11\\|' '{print $2}' file
Run Code Online (Sandbox Code Playgroud)
或者(感谢EdMorton)
awk -F'[|]11[|]' '{print $2}' input.txt
Run Code Online (Sandbox Code Playgroud)
输出:
1-bb|bb|1111|cccc|cccc 1-aaa|aaa|111|bb|bb|1111|cccc|cccc 1-bb|bb|1111|cccc|cccc 1-cccc|cccc 1-dddd|dd 1-bb|bb|333|cccc|cccc 1-aaa|aaa|102|bb|bb|1111|cccc|cccc