join 和 cat 中的重定向
Redirection in join and 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
你们有什么想法吗?
您的示例需要重写为这样,才能按预期工作:
cat <(cat file1) <(cat file2)
<(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
我想知道如何在本网站的示例中使用重定向 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
你们有什么想法吗?
您的示例需要重写为这样,才能按预期工作:
cat <(cat file1) <(cat file2)
<(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