2017-08-08 28 views
-1

我有這樣一個文件:
id1 A B C T G A B C id2 G V L P A J M TUnix:如何分組每兩列?

,我想有:
id1 AB CT GA BC id2 GV LP AJ MT

什麼建議嗎?

+0

我投票,因爲它似乎是一個工具或解決方案的建議的請求,關閉了這個問題,而比請求您的代碼提供幫助。這使您的問題脫離了StackOverflow。如果該評估不正確,並且確實需要編寫自己的代碼,請[將您的工作添加到您的問題中](https://stackoverflow.com/posts/45577119/edit),然後我將收回我的近距離投票。 – ghoti

+0

獲取Arnold Robbins編寫的Effective Awk Programming第4版 - 它會教你如何使用awk來做你想做的事。 –

回答

3

簡單的sed方法:

sed 's/\([A-Z]\) \([A-Z]\)/\1\2/g' file 

或者AWK替代:

awk '{ r=$1; for(i=2;i<=NF;i+=2) r=r FS $i$(i+1); print r }' file 

輸出(兩種方法):

id1 AB CT GA BC 
id2 GV LP AJ MT 
+0

謝謝!它完美的作品 –

+0

@GersonOliveiraJunior,不客氣! – RomanPerekhrest

1
perl -np -e 's/ ([A-Z]) ([A-Z])/ $1$2/g' <FILENAME 

與輸入文件的名稱替換文件名。

+0

當我考慮它時,示例中的大寫字母可能是佔位符,任何東西都是空格分隔的。如果是這樣,請將「[A-Z]」替換爲「[^ \ t]」(除空格或製表符外的任何內容)。使用\ s,\ w,\ d等是有問題的。 「空格」,「單詞字符」,「數字」的概念是由語言環境決定的。 –

2

另一sed

$ sed -r 's/\s(\w+)\s(\w+)/ \1\2/g' file 

id1 AB CT GA BC 
id2 GV LP AJ MT 

工作,即使你的id字段具有相同的字符集。

1
awk '{for(i=1;i<=NF;i++){printf (i%2)?$i" ":$i}printf RS}' file 

如果該字段的數量爲奇數,打印$i" ",否則打印$i