比较来自 2 个不同 csv 文件的 2 列

Sid*_*jee 5 shell awk

我的目的是比较 2 个不同 csv 文件的特定列,并从第二个文件中获取第一个文件中不存在的数据。例如。

第一个文件

"siddhartha",1
"mukherjee",2
Run Code Online (Sandbox Code Playgroud)

第二个文件

"siddhartha",1
"mukherjee",2
"unique",3
Run Code Online (Sandbox Code Playgroud)

预期输出

"unique",3
Run Code Online (Sandbox Code Playgroud)

当第一列的文本大小受到限制时,以下命令可以正常工作,因此在上面的示例中可以正常工作。

awk -F',' 'FNR==NR{a[$1];next};!($1 in a);' file1.csv file2.csv > file3.csv
Run Code Online (Sandbox Code Playgroud)

但是第一列的文本大小非常大(例如 10000 个字符),它不起作用。它在某个点剪切文本。

有什么解决办法吗?

Zac*_*ady 1

根据上面的简单示例,这应该可行。如果第一列中的任何数据可能最终出现在任何其他列中或者数据中存在任何空格,则它将失败。

使用 bash 和 GNU grep。

grep -v -Ff <(cut -d',' -f 1 file1.csv) file2.csv > file3.csv
Run Code Online (Sandbox Code Playgroud)

解释

  • -v倒排匹配
  • -Ff使用文件作为模式源
  • <(cut -d',' -f 1 file1.csv)获取第一列数据并将其用作我们的“文件”。