For loop 使用awk一次分析两个字段
我有一个大约有1000000个字段(以制表符分隔)的文件,但我需要以增量方式成对查看字段,看看它们是相同的还是不同的 以下是文件的1行(缩写为6个字段): 如果两个对相同,我基本上需要打印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<
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'