区分两个 `awk` 命令的输出

sas*_*uke 5 shell diff io-redirection awk

我正在尝试计算两个awk命令的输出之间的差异,但我对它的简单尝试似乎失败了。这是我正在尝试的:

diff $(awk '{print $3}' f1.txt | sort -u) $(awk '{print $2}' f2.txt | sort -u)
Run Code Online (Sandbox Code Playgroud)

由于我不知道的原因,这不起作用。我假设$()构造用于捕获另一个命令的输出,但我的“差异”调用无法识别给它的两个输入。有什么办法可以让我完成这项工作。

顺便说一句,鉴于我登录到没有“写入”权限的生产框,我无法使用将这两个命令的输出写入分隔文件的明显解决方案。

enz*_*tib 21

diff 需要两个文件的名称,因此您应该将两个输出放在两个文件上,然后比较它们:

awk '{print $3}' f1.txt | sort -u > out1
awk '{print $2}' f2.txt | sort -u > out2
diff out1 out2
Run Code Online (Sandbox Code Playgroud)

或者,使用ksh93, bashor zsh,您可以使用进程替换:

diff <(awk '{print $3}' f1.txt | sort -u) <(awk '{print $2}' f2.txt | sort -u)
Run Code Online (Sandbox Code Playgroud)

  • @sasuke 你不需要把 outX 放在同一个目录中,你可以把它们放在 ~/ 或 /tmp/ 中。您应该在机器上有一些地方,您甚至可以在“生产箱”上创建 tmp 文件。 (2认同)