【问题标题】:How do I pipe to Linux split command?如何通过管道传输到 Linux 拆分命令?
【发布时间】:2017-02-23 12:26:35
【问题描述】:

我在 Linux CLI 上有点没用,我正在尝试运行以下命令来随机排序,然后分割一个输出文件前缀为“out”的文件(一个输出文件将有 50 行,另一个是其余的):

sort -R somefile  | split -l 50 out

我得到了错误

split: cannot open ‘out’ for reading: No such file or directory

这大概是因为 split 的第三个参数应该是它的输入文件。如何将排序结果传递给拆分?蒂亚!!

【问题讨论】:

    标签: linux split pipe


    【解决方案1】:

    使用- 作为标准输入:

    sort -R somefile  | split -l 50 - out
    

    来自man split

    输出固定大小的 INPUT 到 PREFIXaa, PREFIXab, ...;默认大小为 1000 行,默认 PREFIX 为“x”。没有 INPUT,或当 INPUT 为 - 时,读取标准输入。

    允许- 指定输入是标准输入是许多 UNIX 实用程序遵循的约定。

    【讨论】:

    • 实际上它可以工作,而无需指定从stdin 读取为-,我在这里遗漏了什么吗?
    • 不,它没有。如果没有-,您将无法为输出文件指定前缀——这是第四个参数。这就是关于 afaik 的问题。
    • 我只是认为是文件out 的错误包含导致了问题
    • 感谢您的帮助。如果任何其他人试图做类似的事情, split 不会产生两个文件,这会: sort -R /media/ed/Seagate/data/test/t.txt | csplit -s - 51.
    • 当然,在这种情况下,您需要将 tail 的输出临时存储到文件中。这不是错误。
    【解决方案2】:

    out 被解释为输入文件。你可以用一个破折号来表示来自STDIN

    sort -R somefile | split - -l 50 out

    【讨论】:

    • 对不起,其他答案是第一个,我错过了。
    【解决方案3】:

    对于像 mac os 这样的 POSIX 系统,- 参数不被接受,您需要完全省略文件名,让它生成自己的名称。

    sort -R somefile | split -l 50
    

    【讨论】:

      猜你喜欢
      • 2011-06-28
      • 1970-01-01
      • 2018-08-18
      • 1970-01-01
      • 1970-01-01
      • 2019-08-17
      • 2016-04-18
      • 2012-08-08
      相关资源
      最近更新 更多