请求您的帮助。 需要使用 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/