我想知道如何使用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
將包含兩個換行符,但這些字段不會包含任何換行符。