gpt4 book ai didi

awk - 替换相同范围内的数字

转载 作者:行者123 更新时间:2023-12-02 07:17:43 24 4
gpt4 key购买 nike

我有一个 tab delim file1,其中第一列看起来像

1
1
6
6
6
1A
1A
1B
2
2
2
2
3
4
4A
Z
Z

我想替换成 1 = 1, 1A = 2, 1B = 3, 2 = 4, 3 = 5, 4 = 6, 4A = 7, 6 = 8, Z = 9输出应该是

1
1
8
8
8
2
2
3
4
4
4
4
5
6
7
9
9

我已经看到其他帖子说,为了避免累积替换,我应该按照我的方式从更大的值到更小的值,并使用以下方法进行多次替换:

sed -e 's/a/b/g ; s/b/d/g' file

但我有 60 次换人。

有没有一种方法可以在循环或其他替代方案中执行此操作,而不是编写 60 个替换

请注意,每个元素都重复了不同的时间,它们可以是数字和字符,但我将它们全部替换为数字 1-60,并且是按照预定义的顺序而不是它们出现的顺序。我的文件有其他具有相同字符的列,但我只想替换第一列中的内容。

最佳答案

使用您的搜索和替换字符串创建一个映射文件:

cat mapping
1 1
1A 2
1B 3
2 4
3 5
4 6
4A 7
6 8
Z 9

然后只需使用此 awk 即可在单个命令中获取所有替换:

awk 'BEGIN{FS=OFS="\t"} NR == FNR{key[$1]=$2; next} $1 in key{$1=key[$1]} 1' mapping file

1
1
8
8
8
2
2
3
4
4
4
4
5
6
7
9
9

关于awk - 替换相同范围内的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56634103/

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