Joh*_*han 2 terminal awk command-line sed
我有一个具有以下结构的(大)CSV 文件(A):
1234ABC 456789
1235ABD 098732
1235ABE 098731
1235ABF 198731
Run Code Online (Sandbox Code Playgroud)
另一个文件 (B) 包含应从 A 中删除的条目:
1234ABC
1235ABE
Run Code Online (Sandbox Code Playgroud)
我想运行一个awk
orsed
命令(或一些命令行脚本,如果awk
或sed
不够的话)从 A 中删除所有行,其第一列等于 BIe 中的一行,脚本运行后 A 中的结果应该是:
1235ABD 098732
1235ABF 198731
Run Code Online (Sandbox Code Playgroud)
请注意,仅删除 A 中以 B 中任何行开头的行是不够的。例如,如果 A 包含:
1235AC 456789
1235A 098732
Run Code Online (Sandbox Code Playgroud)
B 包含:
1235A
Run Code Online (Sandbox Code Playgroud)
那么 A 之后应该包含这个:
1235AC 456789
Run Code Online (Sandbox Code Playgroud)
我怎样才能在 bash 中实现这一点,最好使用awk
or sed
(或 shell 脚本,如果需要)?
你可以使用这个awk
:
awk 'NR == FNR {dels[$1]; next} !($1 in dels)' file2.csv file1.csv
1235ABD 098732
1235ABF 198731
Run Code Online (Sandbox Code Playgroud)
这是标准的 2 pass awk 命令,它将file2
第一遍中的所有行存储在一个数组中dels
。
在第二遍中,我们只是从array 中不存在的file1
地方打印行。$1
dels
归档时间: |
|
查看次数: |
65 次 |
最近记录: |