For loop 使用awk一次分析两个字段

For loop 使用awk一次分析两个字段,for-loop,awk,For Loop,Awk,我有一个大约有1000000个字段(以制表符分隔)的文件,但我需要以增量方式成对查看字段,看看它们是相同的还是不同的 以下是文件的1行(缩写为6个字段): 如果两个对相同,我基本上需要打印1,如果两个对不同,则打印2,因此输出应为: 2 1 2 这在awk for循环中可能吗?使用awk'{if($1==$2)打印“1”;else打印“2”}对于我拥有的字段数量来说是不可行的 谢谢大家! 你可以试试 echo "C G G G T A" | awk '{ for(i=1; i<

我有一个大约有1000000个字段(以制表符分隔)的文件,但我需要以增量方式成对查看字段,看看它们是相同的还是不同的

以下是文件的1行(缩写为6个字段):

如果两个对相同,我基本上需要打印
1
,如果两个对不同,则打印
2
,因此输出应为:

2 1 2
这在awk for循环中可能吗?使用
awk'{if($1==$2)打印“1”;else打印“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)
    }
}'
echo“cgta”|
awk'{
对于(i=1;i您可以尝试

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)
    }
}'
echo“cgta”|
awk'{

对于(i=1;i我会用sed代替,可能更快(无拆分):

第一个
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'

我会改为使用sed,可能更快(无拆分):

第一个
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'
sed 's/^\(\S\)\s/\1/; s/\(\s\S\)\s/\1/g; s/\(\S\)\1/1/g; s/\S\S/2/g'