基本shell编程

Moh*_*hit 9 bash shell awk

对于shell程序员来说,这可能是一个非常基本的问题.但是假设我有一个文本文件A和B而B是A的子集.

我想创建一个包含(AB)数据的文本文件C.

所以省略所有常见的行.

文件中的行是数字数据:喜欢

id , some aspect, other aspec.
Run Code Online (Sandbox Code Playgroud)

谢谢.

Tim*_*ote 12

使用sortuniq

sort a b | uniq -u
Run Code Online (Sandbox Code Playgroud)

如果你想要A和B之间相同的线,你可以使用 uniq -d

sort a b | uniq -d
Run Code Online (Sandbox Code Playgroud)

这当然假定A和B中的数据完全相同.数据集中不能有任何丢失空格或制表符.如果有,你就必须清理数据用sed,trawk第一.

编辑

作为彼得.O指出,如果文件中发生了完全相同的重复,这将失败a.如果这是一个问题,您可以通过执行以下操作来解决此问题:

sort <(sort -u a) b | uniq -u
Run Code Online (Sandbox Code Playgroud)


gle*_*man 7

有一个实用程序叫做comm用于这个:

comm -23 A B > C
Run Code Online (Sandbox Code Playgroud)

其中的-2意思是"拒绝文件B特有的行"(你说没有任何行),-3意思是"拒绝两个文件共有的行".

@BartonChittenden提出了一个很好的观点:

comm -23 <(sort A) <(sort B) > C
Run Code Online (Sandbox Code Playgroud)

  • 请注意,必须对两个文件进行排序. (2认同)