awk为什么不打印换行符?
问题描述:
我有一个文件,它看起来像这样:awk为什么不打印换行符?
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
等等,但它不像我预期的那样工作。请指教。
答
一个松散的方式,
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
$
+0
这工作正常。谢谢 – mane 2012-02-28 23:21:37
您正在使用哪种外壳?这是一个非常规的提示,并不表示壳的类型。你如何证明数据是平坦的? – 2012-02-28 23:04:11
您是否尝试更改RS变量? – 2012-02-28 23:14:32
谢谢。我正在使用Cygwin,但是Shiplu提到的行终止符并不合适。 – mane 2012-02-28 23:21:29