2013-08-29 44 views
0

我有這樣一個欄一個文件的文件:如何更改文件與1列與2列

45 
88 
90 
77 
12 
29 

我想改變它是這樣的:

45 88 
90 77 
12 29 

我該如何使用awk

+2

這不是一個免費的編碼服務。請顯示你的嘗試,並解釋爲什麼它沒有工作。 – 2013-08-29 04:19:53

+0

確保您的問題在問題預覽部分以您希望的方式顯示。如果沒有編輯,你基本上會問如何將蘋果換成蘋果。 – mdoran3844

回答

3

隨着SED:

sed 'N;s/\n/ /' input 
2

一個AWK版本

awk '{printf "%s ",$0;getline;print $0}' file 

另一個版本

awk 'NR%2 {printf "%s ",$0;next}1' 
+2

不要使用getline版本作爲你邀請鼻惡魔(見http://awk.info/?tip/getline)沒有很好的理由,因爲它不會使腳本簡短或以任何方式改善它與非getline版本相比。 –

+1

感謝您的信息。將盡量避免getline – Jotne

1

另一個awk版本:

awk 'NR%2 == 1 { old = $0 } 
    NR%2 == 0 { print old " " $0 }' file 

請記住old中的奇數行;在偶數行上打印舊值和新值。

2

我通常只是用xargs對於這種事情:

$ xargs -n2 < file 
45 88 
90 77 
12 29 

我很好地擴展你剛剛從2的值更改爲你想要的列數,而無需重新編寫一個新的腳本。

+1

不錯的選擇(順便說一句,有一個錯字:xrags而不是xargs)。 – Bentoy13

1

或者只是簡單地使用shell:

while read A; do read B; echo "$A $B"; done < file 
3
$ awk '{printf "%s%s", $0, (NR%2 ? OFS : ORS)}' file 
45 88 
90 77 
12 29 

,或者如果你瞭解AWK相當不錯,你可能更喜歡:

$ awk '{ORS=(NR%2?FS:RS)}1' file 
45 88 
90 77 
12 29