用其他数值替换某列中的数值

时间:2018-01-11 19:44:37

标签: linux shell awk sed

我的数据如下:

83997000|17561815|20370101000000 83997000|3585618|20370101000000 
83941746|13898890|20361231230000 83940169|13842974|20171124205011 
83999444|3585618|20370101000000 83943970|10560874|20370101000000 
83942000|13898890|20371232230000 83999333|3585618|20350101120000

现在,我想要实现的目标如下:

如果第2列为17561815,请打印22220以替换17561815

如果第2列为3585618,请打印23330以替换3585618

如果第2列为13898890,请打印24440以替换13898890

如果第2列为13842974,请打印25550以替换13842974

如果第2列为3585618,请打印26660以替换3585618

如果第2列为10560874,请打印27770以替换10560874

输出如下:

83997000|22220|20370101000000 83997000|23330|20370101000000 
83941746|24440|20361231230000 83940169|25550|20171124205011 
83999444|26660|20370101000000 83943970|27770|20370101000000 
83942000|24440|20371232230000 83999333|26660|20350101120000

1 个答案:

答案 0 :(得分:3)

awk 解决方案:

awk 'BEGIN{ 
         FS=OFS="|"; 
         a["17561815"]=22220; a["13898890"]=24440; 
         a["3585618"]=26660; a["13842974"]=25550; 
         a["10560874"]=27770 
     }
     $2 in a{ $2=a[$2] }
     $4 in a{ $4=a[$4] }1' file

输出:

83997000|22220|20370101000000 83997000|26660|20370101000000 
83941746|24440|20361231230000 83940169|25550|20171124205011 
83999444|26660|20370101000000 83943970|27770|20370101000000 
83942000|24440|20371232230000 83999333|26660|20350101120000