为什么awk不打印新行?
我有一个如下所示的文件:为什么awk不打印新行?,awk,Awk,我有一个如下所示的文件: 1 2 AA 4 5 AA BB 7 8 AA BB CC 10 11 AA BB CC DD 我使用awk仅提取n=3的每一行n >>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 我试着使用\
1
2
AA
4
5
AA BB
7
8
AA BB CC
10
11
AA BB CC DD
我使用awk仅提取n=3的每一行n
>>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
等等,但它没有像我期望的那样工作。请详细告知。
awk '{ if (NR%3==0) { print $0} }'
您还可以使用{printf(“%s\n\n”,$0)}
。如果单个\n
不起作用
如果仍然不起作用,您可能需要检查线路终止符。这可能不合适。使用awk
中的RS
变量在异常行终止符上进行分离。对每行使用print
以下命令:
awk 'NR%3==0 { print $0 }' /input/file_foo >> output/file_foobar
我认为问题在于你显示数据的方式,而不是在处理过程中
$ 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
$
$awk'NR%3==0'x>y
$x=$(似乎根本不起作用。第二个会产生一些错误。第一个根本不会打印正确的结果。我实际上想将文件中的每三行复制到另一个文件,仅此而已。我认为您的文件行终止符不正确。谢谢Shiplu。行终止符不正确。它现在可以工作了。哪个shell您使用的是?这是一个常规提示,不指示外壳类型。您如何证明数据在一行上是平坦的?您是否尝试更改RS变量?谢谢。我使用的是Cygwin,但行终止符不适合Shiplu提到的。