gpt4 book ai didi

linux - 如何用 awk 和 gsub 替换文件中的数字(分别用 NA、0101、0102 和 0202 替换 -1、0、1 和 2)?

转载 作者:太空宇宙 更新时间:2023-11-04 09:50:37 24 4
gpt4 key购买 nike

我有这样一个文件:

hgfjk
AX-75183725 2 2 -1 2 1 2 -1 0

我想替换 -1 , 0 , 12通过 NA , 0101 , 01020202分别。所以我会得到:

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

不知道怎么回事!!有人可以帮忙谢谢

最佳答案

我会创建一个数组,其中包含要替换的值。并将计算除第一个字段之外的每个字段的每个位置。

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")

关于linux - 如何用 awk 和 gsub 替换文件中的数字(分别用 NA、0101、0102 和 0202 替换 -1、0、1 和 2)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11628823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com