如何使用Bash在另一个文本文件中使用转换替换文本文件的列中的名称

时间:2018-02-22 13:20:59

标签: linux bash unix awk sed

我进行了搜索,其他帖子都不符合我的情况。基本上,我有一个很长的主文本文件,看起来像这样:

Group1 0 100
Group2 100 200
Group3 200 300
Group4 300 400

等..

我需要替换主文本文件中的名称,使用另一个列出应转换为的文本文件。该转换文本文件如下所示:

Group1 Team1
Group2 Team2
Group3 Team2
Group4 Team3

因此,通过使用脚本,我想转换主文本文件:

Team1 0 100
Team2 100 200
Team2 200 300
Team3 300 400

同样,这些都是大文件,它们的长度不一样。任何帮助都非常感谢!

1 个答案:

答案 0 :(得分:1)

将转换列表读入数组,然后用它来替换原始文件中的第一个字段:

awk 'NR == FNR { a[$1] = $2; next } { $1 = a[$1] } 1' conversion.txt original.txt
  • NR == FNR条件定位第一个文件(总行数等于文件行号)
  • next跳过脚本的其余部分并转到下一行
  • 1是一个始终为真的条件,默认操作{ print }
  • 也是如此

如果您想确保存在替换,可以在第二个操作块之前添加条件$1 in a