我有一个这样的文件:
hgfjk
AX-75183725 2 2 -1 2 1 2 -1 0
我希望将-1
,0
,1
和2
替换为NA
,0101
,0102
和分别为0202
。所以我会得到:
hgfjk
AX-75183725 0202 0202 NA 0202 0101 0202 NA 0101
我使用这个命令:
awk 'NR == 1 { print; next } NR>1{a=$1;$1="@";gsub(/ -1\>/,"NA");gsub(/<0\>/,"0101");gsub(/<1\>/,"0102");gsub(/\<2\>/,"0202");$1=a;print}' file > out
给了我这个输出:
hgfjk
AX-75183725 0202 2NA 0202 0102 2NA 0101
我不知道有什么问题!有人可以帮助谢谢
答案 0 :(得分:2)
我会创建一个包含要替换的值的数组。并计算每个领域的每个位置,但是第一个。
awk '
BEGIN {
subs="NA 0101 0102 0202";
split( subs, subs_arr );
}
NR == 1 {
print;
next
}
NR>1{
for ( i = 2; i <= NF; i++ ) {
$i = subs_arr[ $i + 2 ];
}
print
}
' file
运行上一个命令并获得以下输出:
hgfjk
AX-75183725 0202 0202 NA 0202 0102 0202 NA 0101
编辑:我提供了一个解决方案,但我猜你的工作因为gsub(/<0\>/,"0101")
和gsub(/<1\>/,"0102")
而无效。您也应该转义<
,例如:gsub(/\<0\>/,"0101")
和gsub(/\<1\>/,"0102")