我有一個包含大約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'