用于比较文件和两个字段的awk:
要将第一个文件字段$4与第二个文件字段$1进行比较,将第一个文件字段$8与第二个文件字段$2进行比较。然后仅从第一个文件打印匹配案例 我使用两个单独的命令来实现上述要求,请建议改进和避免两个步骤 Input.csv用于比较文件和两个字段的awk:,awk,Awk,要将第一个文件字段$4与第二个文件字段$1进行比较,将第一个文件字段$8与第二个文件字段$2进行比较。然后仅从第一个文件打印匹配案例 我使用两个单独的命令来实现上述要求,请建议改进和避免两个步骤 Input.csv Transaction ID,Request source,User name,SendMobNum,RecMobNum,ServiceClass,Service,Amount,CreditAmount,Bonus,Process fee ABCD,SSS,EFG,1234,9999
Transaction ID,Request source,User name,SendMobNum,RecMobNum,ServiceClass,Service,Amount,CreditAmount,Bonus,Process fee
ABCD,SSS,EFG,1234,9999,2345,AB,30,1,4,1
ABCD,SSS,EFG,1234,9999,2345,AB,40,2,5,2
ABCD,SSS,EFG,1234,9999,2345,AB,60,3,6,3
ABCD,SSS,EFG,3456,9999,2345,AB,30,1,4,1
ABCD,SSS,EFG,3456,9999,2345,AB,40,2,5,2
ABCD,SSS,EFG,3456,9999,2345,AB,60,3,6,3
ABCD,SSS,EFG,5678,9999,2345,AB,30,1,4,1
ABCD,SSS,EFG,5678,9999,2345,AB,40,2,5,2
ABCD,SSS,EFG,5678,9999,2345,AB,60,3,6,3
master.csv
SendMobNum,Amount
1234,30
5678,15
2345,60
4567
8888
步骤1:检查第一个文件字段$4与第二个文件字段$1
awk ' BEGIN {FS = OFS = ","} FNR==NR {a[$1] = $0; next} ($4 in a) {print $0}' master.csv Input.csv >Op_step11.csv
Op_step11.csv
Transaction ID,Request source,User name,SendMobNum,RecMobNum,ServiceClass,Service,Amount,CreditAmount,Bonus,Process fee
ABCD,SSS,EFG,1234,9999,2345,AB,30,1,4,1
ABCD,SSS,EFG,1234,9999,2345,AB,40,2,5,2
ABCD,SSS,EFG,1234,9999,2345,AB,60,3,6,3
ABCD,SSS,EFG,5678,9999,2345,AB,30,1,4,1
ABCD,SSS,EFG,5678,9999,2345,AB,40,2,5,2
ABCD,SSS,EFG,5678,9999,2345,AB,60,3,6,3
步骤2:第一个文件字段$8与第二个文件字段$2
awk ' BEGIN {FS = OFS = ","} FNR==NR {a[$2] = $0; next} ($8 in a) {print $0}' master.csv Op_step11.csv >Op_step22.csv
Op_step22.csv
Transaction ID,Request source,User name,SendMobNum,RecMobNum,ServiceClass,Service,Amount,CreditAmount,Bonus,Process fee
ABCD,SSS,EFG,1234,9999,2345,AB,30,1,4,1
ABCD,SSS,EFG,1234,9999,2345,AB,60,3,6,3
ABCD,SSS,EFG,5678,9999,2345,AB,30,1,4,1
ABCD,SSS,EFG,5678,9999,2345,AB,60,3,6,3
Transaction ID,Request source,User name,SendMobNum,RecMobNum,ServiceClass,Service,Amount,CreditAmount,Bonus,Process fee
ABCD,SSS,EFG,1234,9999,2345,AB,30,1,4,1
ABCD,SSS,EFG,1234,9999,2345,AB,60,3,6,3
ABCD,SSS,EFG,5678,9999,2345,AB,30,1,4,1
ABCD,SSS,EFG,5678,9999,2345,AB,60,3,6,3
期望输出:
您想要的输出看起来像逻辑,而不是逻辑
awk -F, '
NR == FNR {send[$1]; amt[$2]; next}
FNR == 1 || ($4 in send && $8 in amt)
' master.csv Input.csv
Transaction ID,Request source,User name,SendMobNum,RecMobNum,ServiceClass,Service,Amount,CreditAmount,Bonus,Process fee
ABCD,SSS,EFG,1234,9999,2345,AB,30,1,4,1
ABCD,SSS,EFG,1234,9999,2345,AB,60,3,6,3
ABCD,SSS,EFG,5678,9999,2345,AB,30,1,4,1
ABCD,SSS,EFG,5678,9999,2345,AB,60,3,6,3