Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于比较文件和两个字段的awk:_Awk - Fatal编程技术网

用于比较文件和两个字段的awk:

用于比较文件和两个字段的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

要将第一个文件字段$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,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