为什么这个Linux命令的结果没有通过管道传输?
我正在学习使用Linux终端,但管道似乎并不像我预期的那样工作,我想了解原因 我有两个文件: 文件1 文件2 我的想法是对File2进行排序,然后使用以下命令将排序结果与File1连接起来:为什么这个Linux命令的结果没有通过管道传输?,linux,terminal,Linux,Terminal,我正在学习使用Linux终端,但管道似乎并不像我预期的那样工作,我想了解原因 我有两个文件: 文件1 文件2 我的想法是对File2进行排序,然后使用以下命令将排序结果与File1连接起来: sort -k2n File2 | join -1 2 -2 2 File1 File2 结果我预料到了 2 John Paul 5 Francis Henry 但它似乎并没有在配管和退货之前订购: 2 John Paul join: File2:3: is not ordered: Francis
sort -k2n File2 | join -1 2 -2 2 File1 File2
结果我预料到了
2 John Paul
5 Francis Henry
但它似乎并没有在配管和退货之前订购:
2 John Paul
join: File2:3: is not ordered: Francis 5
为什么它没有管道化我的排序???
排序文件2
对文件2没有任何作用,它将排序后的内容写入标准输出(我想这是您所期望的,因为您使用的是管道)
连接文件1文件2
忽略标准输入(即管道),并对指定文件中的数据进行操作。特别是,文件2没有排序
您可能希望在join命令中编写
-
而不是file2
-
表示从标准输入读取。排序命令不从标准输入读取,因此联接不考虑对文件2的排序
您的解决方案应该如下所示:
$ sort -k2n File2 | join -1 2 -2 2 File1 -
2 Paul John
5 Henry Francis
2 John Paul
join: File2:3: is not ordered: Francis 5
$ sort -k2n File2 | join -1 2 -2 2 File1 -
2 Paul John
5 Henry Francis