从this question,我找到了split
utilty,它接受一个文件并将其拆分为大小均匀的块。默认情况下,它将这些块输出到新文件,但我想将它输出到stdout,由换行符(或任意分隔符)分隔。这可能吗?
我尝试了cat testfile.txt | split -b 128 - /dev/stdout
失败,错误为split: /dev/stdoutaa: Permission denied
。
查看帮助文本,似乎这告诉split将/ dev / stdout用作文件名的前缀,而不是写入/ dev / stdout本身。它不表示使用分隔符直接写入单个文件的任何选项。有没有办法可以欺骗split
这样做,还是有不同的实用工具可以实现我想要的行为?
答案 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个字符。