linux - Awk 检查文件 1 中 column1 的值是否存在于 file2 中并更新另一列中的字段

标签 linux shell perl awk scripting

请求您的帮助。 需要使用 awk 在 linux 中执行以下任务。 我有两个文件。 我需要检查文件 1 中的任何 documentN(column1) 值是否也存在于 file2 的 column1(Billdoc) 中,如果找到,则对应于文件 2 中的此 BillDoc 值,如果我们有 Curr(column2) 值而不是 INR ,然后在文件 1 中需要将供应类型(第 2 列)替换为 EXPWT,以对抗文件 1 中的 documentN 值。

例如,我们在 file1 和 file2 中都有值 262842964,并且根据 file2 中的值,我们将 Curr(column2)值设为 USD(非 INR)。所以我需要用 EXPWT 替换文件 1 中 CAN 的 column2(supplytype) 值。

文件 1

DocumentN   SupplyType

262842964          CAN

E08/1002/00798        TAX

E08/1002/00816        TAX

INDTR1117GSM1459      CAN

INDTR1117GSM5530      TAX

262852823             TAX

文件 2

BillDoc         Curr

 262881626      INR 

 262881627      INR 

 262842964      USD

 262881629      INR

 E08/1002/00816     USD

 INDTR1117GSM5530    USD

最佳答案

awk 'NR==FNR { if(FNR!=1&&$2!="INR") arr[$1]=1; next}
 FNR!=1 && $0 && $1 in arr  { $2="EXPWT" }
 1;' file2 file1

结果是

DocumentN   SupplyType

262842964 EXPWT

E08/1002/00798        TAX

E08/1002/00816 EXPWT

INDTR1117GSM1459      CAN

INDTR1117GSM5530 EXPWT

262852823             TAX

我假设您只想将文件 1 中记录的第二个字段更新为 EXPWT

$0 in FNR!=1 && $0 && $1 in arr,是考虑空行

正如@kvantour 回答的那样,您可以使用 sub($2,"EXPWT") 来保留原始字段分隔符,但要确保第一个字段不包含第二个字段的字符串

关于linux - Awk 检查文件 1 中 column1 的值是否存在于 file2 中并更新另一列中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49507095/

相关文章:

linux - 如何记录 Linux 进程的内存和 CPU 使用情况

linux - 如何使用 shell 脚本将文本文件转换为 JSON 文件

VBA Shell 并等待退出代码

perl - Data::Printer 是否处理数组切片?

regex - 使用 Perl 正则表达式删除引号和撇号的所有变体

perl - 无法使用 perl 发出 SSL 请求

linux - 从脚本打开新的 gnome 终端并从当前脚本输入变量。

python - ImageMagick 未授权将 PDF 转换为图像

java - 在 Java 中更改 SAMBA 密码

java - 如何使用 Java 重定向 shell 脚本的输出?