![寻找一个棘手的一行来获取 awk 输出的差异](https://linux22.com/image/590980/%E5%AF%BB%E6%89%BE%E4%B8%80%E4%B8%AA%E6%A3%98%E6%89%8B%E7%9A%84%E4%B8%80%E8%A1%8C%E6%9D%A5%E8%8E%B7%E5%8F%96%20awk%20%E8%BE%93%E5%87%BA%E7%9A%84%E5%B7%AE%E5%BC%82.png)
假设我有两个如下的文件:
file1
a 23
b 34
c 47
file2
a justin_beiber_sucks
b segmentation fault
c jackson
d nop
现在我想要的是获取两个文件第一列的差异。我现在这样做
$cat file1 awk '{print $1}'> f1
$cat file2 awk '{print $1}'> f2
$diff -u f1 f2
但这种方法感觉有点落后。有什么巧妙的方法吗?
问题是我总是将pipe
s 视为一维事物,但这里它是二维的。我的意思是 diff 的输入必须同时来自两个不同的来源。
起点可能是 awk 脚本将读取两个文件,进行过滤并将结果保存在临时关联数组中,接下来它将调用 diff 并提供其输入。
答案1
尝试:
diff -u <(awk '{print $1}' file-one) <(awk '{print $1}' file-two)
答案2
很有可能它join
会做你想做的事:
join <(sort file1) <(sort file2)
但由于您没有说清楚真正想要实现的目标,因此很难确定哪些选项可能是合适的。