将`split`实用程序的输出发送到stdout

时间:2016-07-28 19:30:37

标签: bash split stdout

this question,我找到了split utilty,它接受一个文件并将其拆分为大小均匀的块。默认情况下,它将这些块输出到新文件,但我想将它输出到stdout,由换行符(或任意分隔符)分隔。这可能吗?

我尝试了cat testfile.txt | split -b 128 - /dev/stdout

失败,错误为split: /dev/stdoutaa: Permission denied

查看帮助文本,似乎这告诉split将/ dev / stdout用作文件名的前缀,而不是写入/ dev / stdout本身。它不表示使用分隔符直接写入单个文件的任何选项。有没有办法可以欺骗split这样做,还是有不同的实用工具可以实现我想要的行为?

5 个答案:

答案 0 :(得分:5)

目前尚不清楚您想要做什么,但--filter的{​​{1}}选项可能会有所帮助:

split

也许你可以直接使用它。例如,这将一次读取一个10字节的文件,通过 --filter=COMMAND write to shell COMMAND; file name is $FILE 命令传递每个块:

tr

如果你真的想在 stdout 上发出一个在块之间有分隔符的流,你可以这样做:

split -b 10 --filter "tr [:lower:] [:upper:]" afile

如果split -b 10 --filter 'dd 2> /dev/null; echo ---sep---' afile 是我当前目录中的文件,如下所示:

afile

然后上面的命令将导致:

the quick brown fox jumped over the lazy dog.

答案 1 :(得分:1)

从信息页面: `--filter = COMMAND”      使用此选项,而不是简单地写入每个输出文件,      通过管道写入每个指定的shell COMMAND      输出文件。 COMMAND应该使用$ FILE环境变量,      每次调用都设置为不同的输出文件名      命令。

split -b 128 --filter='cat ; echo ' inputfile

答案 2 :(得分:1)

这是一种做法。您将每个128个字符变为变量“var”。

您可以使用首选分隔符进行打印或使用它进行进一步处理。

#!/bin/bash

cat yourTextFile | while read -r -n 128 var  ; do
    printf "\n$var"
done

您可以在命令行中使用它:

while read -r -n 128 var  ; do printf "\n$var" ; done < yourTextFile

答案 3 :(得分:0)

不,该实用程序不会向标准输出写入任何内容。它的standard specification特别指出未使用的标准输出。

如果使用split,则需要连接创建的文件,在它们之间插入分隔符。

如果您只想在每个 N 行插入分隔符,可以使用GNU sed

$ sed '0~3a\-----\' file

这会在第3行插入一行-----

答案 4 :(得分:0)

要将文件分成块,用换行符分隔,然后写入stdout,请使用fold:

shuffle

...将在&#34; chunks&#34;中写入stdout 128个字符。