【发布时间】:2014-08-13 21:59:57
【问题描述】:
想从两个文件中读取并比较第一个字段然后打印
- 两个文件中的匹配行 -(在 f11.txt 和 f22.txt 中可用)-> Op_Match.txt
- f11.txt 中的不匹配行(在 f11.txt 中可用,在 f22.txt 中不可用)-> Op_NonMatch_f11.txt
- f22.txt 中的不匹配行(在 f22.txt 中可用,在 f11.txt 中不可用)-> Op_NonMatch_f22.txt
使用以下 3 个单独的命令来实现上述场景的 .
f11.txt
10,03-APR-14,abc
20,02-JUL-13,def
10,19-FEB-14,abc
20,02-AUG-13,def
10,22-JAN-07,abc
10,29-JUN-07,abc
40,11-SEP-13,ghi
f22.txt
50,DL,3000~4332,ABC~XYZ
10,DL,5000~2503,ABC~XYZ
30,AL,2000~2800,DEF~PQZ
要匹配两个文件中的行:
awk ' BEGIN {FS = OFS = ","} FNR==NR {a[$1] = $0; next} ($1 in a) {print $0,a[$1]}' f22.txt f11.txt> Op_Match.txt
10,03-APR-14,abc,10,DL,5000~2503,ABC~XYZ
10,19-FEB-14,abc,10,DL,5000~2503,ABC~XYZ
10,22-JAN-07,abc,10,DL,5000~2503,ABC~XYZ
10,29-JUN-07,abc,10,DL,5000~2503,ABC~XYZ
到 f11.txt 中的非匹配行:
awk ' BEGIN {FS = OFS = ","} FNR==NR {a[$1] = $0; next} !($1 in a) {print $0}' f22.txt f11.txt > Op_NonMatch_f11.txt
20,02-JUL-13,def
20,02-AUG-13,def
40,11-SEP-13,ghi
到 f22.txt 中的非匹配行:
awk ' BEGIN {FS = OFS = ","} FNR==NR {a[$1] = $0; next} !($1 in a) {print $0}' f11.txt f22.txt > Op_NonMatch_f22.txt
50,DL,3000~4332,ABC~XYZ
30,AL,2000~2800,DEF~PQZ
使用上述 3 个单独的命令来实现上述场景。有没有最简单的方法来避免 3 个不同的命令?任何建议...!!!
【问题讨论】:
-
comm 不适用于行内的字段,只能用于整行。
标签: awk