2015-10-16 60 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'