我在下面有一个制表符分隔的文本文件。我想匹配第 2 列中的值并替换第 5 列中的值。条件是如果第 2 列中有 X 或 Y,我希望第 5 列具有 1,就像下面的结果一样。
1:935662:C:CA 1 0 935662 0
1:941119:A:G 2 0 941119 0
1:942934:G:C 3 0 942934 0
1:942951:C:T X 0 942951 0
1:943937:C:T X 0 943937 0
1:944858:A:G Y 0 944858 0
1:945010:C:A X 0 945010 0
1:946247:G:A 1 0 946247 0
结果:
1:935662:C:CA 1 0 935662 0
1:941119:A:G 2 0 941119 0
1:942934:G:C 3 0 942934 0
1:942951:C:T X 0 942951 1
1:943937:C:T X 0 943937 1
1:944858:A:G Y 0 944858 1
1:945010:C:A X 0 945010 1
1:946247:G:A 1 0 946247 0
我尝试了 awk -F'\t' '{ $5 = ($2 == X ? 1 : $2) } 1' OFS='\t' file.txt
,但我不确定如何一步匹配 X 和 Y。
答案 0 :(得分:3)
使用awk:
awk 'BEGIN{FS=OFS="\t"} $2=="X" || $2=="Y"{$5="1"}1' file
输出:
1:935662:C:CA 1 0 935662 0 1:941119:A:G 2 0 941119 0 1:942934:G:C 3 0 942934 0 1:942951:C:T X 0 942951 1 1:943937:C:T X 0 943937 1 1:944858:A:G Y 0 944858 1 1:945010:C:A X 0 945010 1 1:946247:G:A 1 0 946247 0
见:8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR
答案 1 :(得分:2)
假设如果条件为假,您希望 $5 为零(而不是保持不变):
$ awk 'BEGIN{FS=OFS="\t"} {$5=($2 ~ /^[XY]$/)} 1' file
1:935662:C:CA 1 0 935662 0
1:941119:A:G 2 0 941119 0
1:942934:G:C 3 0 942934 0
1:942951:C:T X 0 942951 1
1:943937:C:T X 0 943937 1
1:944858:A:G Y 0 944858 1
1:945010:C:A X 0 945010 1
1:946247:G:A 1 0 946247 0