2012-08-11 91 views

回答

4

鴻溝&征服:做它在兩個步驟:

  1. 使用AWK引入空行
    各兩行記錄分開:NR%2==0 {print ""}
  2. 管到另一個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將包含兩個換行符,但這些字段不會包含任何換行符。