使用sed awk替换另一个文件中定义的变量

时间:2014-02-23 19:51:00

标签: bash sed awk

我有一个users.txt文件格式为:

User:CityID
Carl:0212
Syd:0312
Rick:9323

和格式为

的city.txt文件
Anaheim:0212
San Jose:0312

我需要使用city.txt文件中的城市名称替换users.txt中的每个CityID。 如何使用sed和awk实现这一目标?

我可以使用awk获取CityID列:

awk -F$'\:' '{print $2}'< users.txt

但是如何用相应的城市名称取代它们?

谢谢。

2 个答案:

答案 0 :(得分:5)

这样可行:

awk 'BEGIN{FS=OFS=":"}NR==FNR{a[$2]=$1;next}{$2=a[$2]}1' city.txt user.txt
  • BEGIN{FS=OFS=":"}:我们将输入和输出字段分隔符设置为:

  • NR==FNR{a[$2]=$1;next}:我们阅读了城市文件,并创建了一个数组来存储以城市ID为索引的城市名称

  • {$2=a[$2]}:我们通过引用数组替换user.txt中的第二个字段

  • 1:这是打印

答案 1 :(得分:2)

您可以使用sedcity.txt转换为sed脚本:

sed 's/\([^:]*\):\(.*\)/s%\2%\1%g/' city.txt

然后将其提供给第二个sed实例以处理users.txt

sed 's/\([^:]*\):\(.*\)/s%\2%\1%g/' city.txt |
sed -f - users.txt

并非所有sed变体都会接受标准输入上的脚本文件;在这种情况下,你将不得不诉诸临时文件。