我有一个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
但是如何用相应的城市名称取代它们?
谢谢。
答案 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)
您可以使用sed
将city.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
变体都会接受标准输入上的脚本文件;在这种情况下,你将不得不诉诸临时文件。