我有一个看起来像这样的文件:
1
2
AA
4
5
AA BB
7
8
AA BB CC
10
11
AA BB CC DD
我使用 awk 仅提取nth
所在的n=3
行。
>>awk 'NR%3==0' /input/file_foo >> output/file_foobar
输出显示在一行中:
AA AA BB AA BB CC AA BB CC DD
.....等等
我希望它显示为:
AA
AA BB
AA BB CC
AA BB CC DD
我尝试将\n
,printf
与\n
一起使用,依此类推,但它并不像我预期的那样有效。请指教。
答案 0 :(得分:9)
一种冗长的方式,
awk '{ if (NR%3==0) { print $0} }'
您也可以使用{printf("%s\n\n", $0)}
。如果单\n
不起作用。
如果它仍然不起作用,您可能需要检查行终止符。这可能不合适。使用RS
中的awk
变量分隔异常行终止符。
答案 1 :(得分:3)
我认为问题在于你显示数据的方式,而不是处理过程。
$ cat x
1
2
AA
4
5
AA BB
7
8
AA BB CC
10
11
AA BB CC DD
$ awk 'NR%3==0' x
AA
AA BB
AA BB CC
AA BB CC DD
$
我怀疑你所做的与:
相似$ awk 'NR%3==0' x > y
$ x=$(<y)
$ echo $x
AA AA BB AA BB CC AA BB CC DD
$ echo "$x"
AA
AA BB
AA BB CC
AA BB CC DD
$
这会让你感到困惑。另见:Capturing multi-line output to a bash variable。
答案 2 :(得分:2)
对每一行使用print
以下内容:
awk 'NR%3==0 { print $0 }' /input/file_foo >> output/file_foobar