linux - 在 Linux 中对两个文件进行排序并找到每个文件唯一的行

标签 linux shell sorting awk

我有 2 个文件。

File1 内容如下:

000000513609200,238/PLMN/000100
000000513609200,238/PLMN/000200
000050354428060,238/PLMN/000200
000050354428060,238/PLMN/000100
001212131415120,238/PLMN/000100
...
...

文件2内容:

000000513609200,238/PLMN/000100
000000513609200,238/PLMN/000200
000050354428060,238/PLMN/000200
000050354428060,238/PLMN/000100
001212131415120,238/PLMN/000100
...
...

文件 1 有近 15000 条记录,文件 2 有近 20000 条记录。我想找到仅存在于 file1 或 file2 中的行(记录)。我正在使用以下内容:

comm -3 <(sort file1) <(sort file2) > file6

这是一个好的选择吗?

此外,这些记录的排序究竟是如何进行的?它如何理解将哪一列作为主键?

您还可以建议一个简单的 awk 脚本来比较 file1 和 file2 并将仅存在于 file1 或仅存在于 file2 中的行转发到 file7,以便我可以比较输出。我想确保我的 comm 产生相同的结果。

最佳答案

使用 awk,您可以在不排序的情况下执行此操作:

awk 'FNR==NR {
   a[$0]
   next
}
{
   if ($0 in a)
      delete a[$0]
   else
      print
}
END {
   for (i in a)
      print i
}' file1 file2

类似地使用 grep 你可以得到相同的使用:

{ grep -vxFf file1 file2; grep -vxFf file2 file1; }

关于linux - 在 Linux 中对两个文件进行排序并找到每个文件唯一的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35755514/

相关文章:

python - 根据并行列表中的相应值对列表进行排序

Java 按字母顺序对 ArrayList 内的 ArrayList 进行排序

c - 如何在 Linux 或 Macos 中为 Windows 编译静态 .lib 库

linux - bash 脚本一次选择多种文件格式进行编码过程

python - 在 shell/python 中传递变量

database - 使用 shell 脚本更新 PostgreSQL 表的每一行

c - 从 C 库中获取当前执行路径

linux - 在脚本中执行 cqlsh

linux - 如何在 bash 中复制字符串?

c# - 对包含字典的对象列表进行排序