我有這樣一個文件:
id1 A B C T G A B C id2 G V L P A J M T
Unix:如何分組每兩列?
,我想有:
id1 AB CT GA BC id2 GV LP AJ MT
什麼建議嗎?
我有這樣一個文件:
id1 A B C T G A B C id2 G V L P A J M T
Unix:如何分組每兩列?
,我想有:
id1 AB CT GA BC id2 GV LP AJ MT
什麼建議嗎?
簡單的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
謝謝!它完美的作品 –
@GersonOliveiraJunior,不客氣! – RomanPerekhrest
perl -np -e 's/ ([A-Z]) ([A-Z])/ $1$2/g' <FILENAME
與輸入文件的名稱替換文件名。
當我考慮它時,示例中的大寫字母可能是佔位符,任何東西都是空格分隔的。如果是這樣,請將「[A-Z]」替換爲「[^ \ t]」(除空格或製表符外的任何內容)。使用\ s,\ w,\ d等是有問題的。 「空格」,「單詞字符」,「數字」的概念是由語言環境決定的。 –
另一sed
$ sed -r 's/\s(\w+)\s(\w+)/ \1\2/g' file
id1 AB CT GA BC
id2 GV LP AJ MT
工作,即使你的id字段具有相同的字符集。
awk '{for(i=1;i<=NF;i++){printf (i%2)?$i" ":$i}printf RS}' file
如果該字段的數量爲奇數,打印$i" "
,否則打印$i
我投票,因爲它似乎是一個工具或解決方案的建議的請求,關閉了這個問題,而比請求您的代碼提供幫助。這使您的問題脫離了StackOverflow。如果該評估不正確,並且確實需要編寫自己的代碼,請[將您的工作添加到您的問題中](https://stackoverflow.com/posts/45577119/edit),然後我將收回我的近距離投票。 – ghoti
獲取Arnold Robbins編寫的Effective Awk Programming第4版 - 它會教你如何使用awk來做你想做的事。 –