我想知道如何使用Awk来处理每两行数据而不是每一行。默认情况下,记录分隔符(RS)被设置为每一个新行,我怎样才能改变这每2行。awk将记录分隔符(RS)更改为每2行
5
A
回答
4
鸿沟&征服:做它在两个步骤:
- 使用AWK引入空行
各两行记录分开:NR%2==0 {print ""}
- 管到另一个AWK过程和
组记录分离器空行:BEGIN {RS=""}
优点:在第二个awk
过程中,您可以将这两行的所有字段设置为$1 to $NF
。
awk '{print}; NR%2==0 {print ""}' data | \
awk 'BEGIN {RS=""}; {$1=$1;print}'
注:
$1=$1
这里用于强制$0
(整个记录)的更新。
这保证了输出在一行上打印两行记录。
一旦在处理两行记录时修改了程序中的字段,就不再需要这个字段。
6
这取决于你想达到什么,但一种方法是使用getline
指令。对于每一行,读下一个并保存在一个变量中。所以,你将有$0
第一线和第二个在even_line
:
getline even_line
4
如果要合并的线,使用paste
实用程序:
$ printf "%s\n" one two three four five
one
two
three
four
five
$ printf "%s\n" one two three four five | paste -d " " - -
one two
three four
five
3
这是一个有点hackish,但它的字面回答你的问题:
awk 'BEGIN {RS = "[^\n]*\n[^\n]*\n"} {$0 = RT; print $1, $NF}' inputfile
将记录分隔符设置为匹配两行的正则表达式。然后对于每一行,将$0
设置为记录终止符(这与RS
中的正则表达式匹配)。这在FS
上执行字段拆分。印刷声明只是一个示范场所持有人。
请注意,$0
将包含两个换行符,但这些字段不会包含任何换行符。