如何解决join 和 cat 中的重定向
我想知道在这个网站的例子中如何使用重定向https://shapeshed.com/unix-join/
这里是输入
$ cat wine.txt
White Reisling Germany
Red Riocha Spain
Red Beaunes France
$ cat reviews.txt
Riocha Meh
Beaunes Great!
Reisling Terrible!
这是命令和结果
$ join -1 2 -2 1 <(sort -k 2 wine.txt) <(sort reviews.txt)
Beaunes Red France Great!
Reisling White Germany Terrible!
Riocha Red Spain Meh
但在这种情况下,重复使用
$ cat file 1
Hello
$ cat file 2
World
我期待
$ cat <file1 <file2
Hello World
结果是
World
你们有什么想法吗?
解决方法
<(cmd)
是一个进程替换。它与用于重定向的 <
共享一个字符——但与它完全无关:
-
<(cmd)
扩展为一个文件名,您可以打开和读取该文件名以获取程序的输出。您可以向命令传递任意数量的文件名。 -
< filename
打开一个文件名作为文件描述符 0。在同一个文件描述符上打开一个新文件会覆盖并关闭前一个。
您的进程替换示例只是传递两个单独的文件名:
$ echo join -1 2 -2 1 <(sort -k 2 wine.txt) <(sort reviews.txt)
join -1 2 -2 1 /dev/fd/63 /dev/fd/6
如果你同样将两个文件名传递给 cat
,你会得到同样的结果:
$ cat file1 file2
Hello
World
,
您的示例需要重写为这样,才能按预期工作:
cat <(cat file1) <(cat file2)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。