文件a.txt
包含:
1 one
2 two
3 three
4 four
5 five
6 six
然后命令:产生三个新文件, ,split -2 a.txt output_
作为输出output_aa
output_ab
output_ac
当我输入:cat output_aa
我收到一条消息:no such file or directory
。
但我可以output_aa
在gedit中查看。
为什么?
答案1
man split
部分说:
将固定大小的 INPUT 输出到 PREFIXaa、PREFIXab、...
其中PREFIX
是最后一个命令行参数(output_
,在您的情况下)。因此,输出文件将被命名为output_aa
,output_ab
和 ,output_ac
分为三个部分,每个部分两行。
这也是我看到的行为。
所以你无法读取的原因output_a
是它不存在,除非你自己单独创建它。
如果您希望仅使用单字母前缀来命名文件并且已经运行 split,您可以重命名它们。假设是 bash,你可以使用它变量重整功能删除后缀的第一个字符。请注意,这可能会创建重复项(在这种特殊情况下不会,但在一般情况下可能会):
for f in output*; do echo mv "${f}" "${f%a?}${f##output_?}"; done
目标名称表达式的第一部分从文件名末尾删除a?
(其中是任意一个字符),仅保留前缀;?
第二部分从开头删除output_?
(同样是任何一个字符)并附加其余部分。?
结果是删除后缀的第一个字符。
当您对这满足您的要求感到满意时,请删除echo
.
如果你可以接受重新运行split
,GNU coreutils(至少 8.5)split
有一个选项--suffix-length
允许您指定后缀的长度。只需将其添加到您的命令行并使用适当的值即可:
split -2 --suffix-length=1 a.txt output_
这给出了output_a
、output_b
和output_c
,如所期望的。谢谢@don_crissti指出这一点。