Linux 将某列中的数值替换为其他数值的步骤

Linux 将某列中的数值替换为其他数值的步骤,linux,shell,awk,sed,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|3

我的数据如下:

83997000|17561815|20370101000000 83997000|3585618|20370101000000 
83941746|13898890|20361231230000 83940169|13842974|20171124205011 
83999444|3585618|20370101000000 83943970|10560874|20370101000000 
83942000|13898890|20371232230000 83999333|3585618|20350101120000
现在,我想实现的目标如下:

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

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

到目前为止你试过什么?向我们展示你所做的事情,人们会更愿意帮助你。我们不会为你做作业/家庭作业。3585618、23330或26660应该由哪个号码代替?@RAZ_Muh_Taz,我刚开始学习Linux。我是improving@choroba很抱歉26660将取代3585618。问题在哪里提到第4栏?@ghoti,不要试图理解,这是直觉和“阅读思维”的情况。)@RomanPerekhrest,谢谢。你的回答很有用。然而,在我发布的内容中应该只有3个专栏。页面将其重新格式化为6列。现在,我只处理了3列,因此调整了命令,使其看起来像这样:awk'BEGIN{FS=OFS=“|”;a[“17561815”]=22220;a[“13898890”]=24440;a[“3585618”]=26660;a[“13842974”]=25550;a[“10560874”]=27770}$2在{$2=a[$2]}1'文件中