【问题标题】:Create a file with the content of 2 other files, then sort the new file使用其他 2 个文件的内容创建一个文件,然后对新文件进行排序
【发布时间】:2021-03-05 07:25:50
【问题描述】:

我正在使用以下命令:cat > unsorted.txt | cat > unsorted.txt |排序 -r unsorted.txt > sorted.txt

如果我运行此行,一旦我得到一个错误,如果我再次运行它,文件 unsorted.txt 不存在,那么我会得到第二个文件 sorted.txt 具有正确的数据。我可能在逻辑上做错了,但是由于创建了未排序的文件,为什么它第一次无法对文件进行排序,提前谢谢你。

【问题讨论】:

  • 为什么不只是cat file1.txt file2.txt | sort - r > sorted.txt
  • 我需要 file1 和 file2 的内容在一个名为 unsorted 的新文件中,然后我需要将未排序的文件排序为一个未排序的新文件名,最后我将有 2 个新文件。我也需要保留第一个文件,所以我的目标是在命令末尾有 2 个文件。
  • 所以cat file1.txt file2.txt | tee unsorted.txt | sort - r > sorted.txt
  • 我确实使用了“cat file1.txt file2.txt | sort - r > sorted.txt”并添加了 tee >> unsorted 结果:cat file1.txt file2.txt | tee unsorted.txt |排序 -r > sorted.txt。感谢您的提示,幸好我没有看到您的第二次回复,所以我通过测试了解更多。
  • 您的问题与 Kali Linux 无关,根据您的问题,您似乎是初学者。在这种情况下,您应该使用通用发行版而不是 Kali。见unix.meta.stackexchange.com/q/5360/330217

标签: sorting pipe cat tee


【解决方案1】:

你有命令:

cat < file1.txt | tee >> unsorted.txt | cat < file2.txt >> unsorted.txt |
sort -r unsorted.txt > sorted.txt

这有很多问题。逐步剖析:

  1. cat &lt; file1.txt |——工作正常,但不需要重定向; cat file1.txt 也可以。
  2. tee &gt;&gt; unsorted.txt |tee 命令读取其标准输入并将一份副本写入其参数列表中的每个命名文件,并将另一份写入其标准输出。 &gt;&gt; unsorted.txt 重定向意味着标准输出进入文件而不是管道。 tee 没有提供任何参数,因此它只写入标准输出。
  3. cat &lt; file2.txt &gt;&gt; unsorted.txtcat 命令读取其参数列表中指定的文件或读取其标准输入。由于没有文件被命名(程序看不到与重定向符号相关的文件名),它读取其标准输入。这来自file2.txt 并写入unsorted.txt — 它忽略标准输入,我想这没关系,因为管道从不发送任何数据(见第 2 点)。您有两个进程附加到unsorted.txt;无法保证结果,但您可能没问题。
  4. sort -r unsorted.txt &gt; sorted.txt — 幸运的是,sort 从命令行参数读取,仅在没有文件时默认为标准输入。但是,sortteecat 写入unsorted.txt 时运行——行为不受控制。

总结一下:您使用 I/O 重定向过于随意,这样做会让自己感到困惑。

使用起来会简单得多:

cat file1.txt file2.txt | tee unsorted.txt | sort -r -o sorted.txt

您可以使用&gt; sorted.txt 代替-o sorted.txt,但-o file 选项的一个优点是输出文件也可以是输入文件之一,并且输入文件在被读取之前不会被销毁.这在这里并不重要(没有输入文件名),但它可能很重要且有用。

此命令将file1.txtfile2.txt 的内容依次写入tee 的标准输入,该命令将该信息的副本写入unsorted.txt,同时将副本写入其标准输出,这也是sort 的标准输入。 sort 命令具有您使用的-r 标志(用于反向排序),并且指定了输出文件;没有输入文件参数,因此它对标准输入进行排序。这条管道没有不确定性。也没有 &lt;&gt;&gt;&gt; 重定向(不过,一个是可选的)。

【讨论】:

    猜你喜欢
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多