使用awk命令-2的Vlookup并打印成所需的形式

时间:2018-09-16 22:06:47

标签: bash shell awk

我的linux服务器中有两个文件:

文件_1

2018-09-01-00:00:03|911234567899|919535144580
2018-09-01-00:00:06|916724367238|919535144580
2018-09-01-00:00:07|911673617378|919535144580
2018-09-01-00:00:09|916721377382|919535144580
2018-09-01-00:00:13|910933214512|919535144580
2018-09-01-00:00:13|919777823434|919535144580
2018-09-01-00:00:15|919562343456|919535144580
2018-09-01-00:00:16|918867558865|919535144580

File_2

S NO.,Column1,Column2,Column3
72070,9112345,TGM,AP
72071,9167243,BGM,MP
72072,9116736,AGM,KN
72073,9167213,TGM,AP

预期输出:

911234567899,TGM,AP
916724367238,BGM,MP
911673617378,AGM,KN
916721377382,TGM,AP
910933214512,NA,NA

我想要使用awk或bash脚本的一行命令,该命令应检查File_2中的column1并将其检查到File_1第二列的前6位,并打印预期的输出。

1 个答案:

答案 0 :(得分:0)

不确定,由于您显示的输出与描述不完全相同,请尝试以下方法。

awk 'FNR==NR{a[$2]=$3","$4;next} {$2=substr($2,1,7) in a?$2","a[substr($2,1,7)]:$2",NA,NA";print $2}' FS="," Input_file_2  FS="|"  Input_file_1

现在也可以添加一种非衬里形式的解决方案。

awk '
FNR==NR{
  a[$2]=$3","$4
  next
}
{
  $2=substr($2,1,7) in a?$2","a[substr($2,1,7)]:$2",NA,NA"
  print $2
}
' FS="," File_2  FS="|" File_1