2015-10-16 55 views
0

我有一個包含大約1 000 000個字段(製表符分隔)的文件,但我需要成對查看字段是否相同或不同。用awk一次分析兩個字段

這裏爲1行的文件(以下簡稱爲6個字段):

C G G G T A 

我基本上需要打印1如果對是相同的並且2如果對是不同的,所以輸出應爲:

2 1 2 

這是可能的awk for循環?使用awk '{ if ($1==$2) print "1"; else print "2" }'根本不適用於我擁有的字段數量。

謝謝!

回答

3

你可以試試,

echo "C G G G T A" | 
awk '{ 
    for(i=1; i<=NF; i+=2){ 
     printf (i<NF-1?"%s ":"%s\n"), ($i==$(i+1)?1:2) 
    } 
}' 

你,

 
2 1 2 
1

我會用sed代替,大概更快(不分裂)做到這一點:

sed -r 's/(^\S|\s\S)\s/\1/g; s/(\S)\1/1/g; s/\S\S/2/g' 

第一s/通過消除它們之間的空間組對。第二個s/找到匹配。

第三個s/轉換剩餘物(不匹配)。

或等值,如果你的sed沒有-r

sed 's/^\(\S\)\s/\1/; s/\(\s\S\)\s/\1/g; s/\(\S\)\1/1/g; s/\S\S/2/g'