我有一个包含大约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" }'
根本不适用于我拥有的字段数量。
谢谢!
我有一个包含大约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" }'
根本不适用于我拥有的字段数量。
谢谢!
你可以试试,
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
我会用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'