2013-08-06 31 views
2

我正在嘗試重新格式化一個大文件。每行的前6列都是正常的,但行中的其餘列需要以2爲增量進行組合,並在中間加上「/」字符。使用awk在單個文件內合併列

示例文件(只顯示幾列,但在實際的文件更多):

1  1  0  0  1  2  A  T  A  C 

分爲:

1  1  0  0  1  2  A/T  A/C 

到目前爲止,我一直在努力的awk,這是我在哪裏在...

awk '{print $1,$2,$3,$4,$5; for(i=7; i < NF; i=i+2) print $i+"/"+$i+1}' myfile.txt > mynewfile.txt 

回答

2
awk '{for(i=j=7; i < NF; i+=2) {$j = $i"/"$(i+1); j++} NF=j-1}1' input 
2

請試試這個:

awk '{print $1" "$2" "$3" "$4" "$5" "$6" "$7"/"$8" "$9"/"$10}' myfile.txt > mynewfile.txt 
+0

對不起,我沒有在我的文章中指定,但我在我的實際文件中有超過10列。其實我有超過一百萬列,所以我需要某種方式來執行該組合模式,直到行結束。儘管所有的行都有相同的列數。 – KBoehme

1

「+」是算術「和」運算符,字符串連接是通過簡單地列出串彼此相鄰,即得到字符串「foobar的」做你會寫:

"foo" "bar" 

不是:

"foo" + "bar" 

不管怎樣,試試這個:

awk -v ORS= '{print $1,$2,$3,$4,$5,$6; for(i=7;i<=NF;i++) print (i%2?OFS:"/") $i; print "\n"}' myfile.txt > mynewfile.txt