use*_*326 5 command-line bash regex
如何传递 list.txt 中的所有文件,它看起来像
file1_1.txt
file1_2.txt
file1_3.txt
file1_4.txt
Run Code Online (Sandbox Code Playgroud)
到split
命令(目录中有其他 txt 文件)并使其返回编号为中的部分(假设 file1_1.txt 将被分成 4 个部分)
file1_1_1.txt;
file1_1_2.txt;
file1_1_3.txt;
file1_1_4.txt
Run Code Online (Sandbox Code Playgroud)
等等....
为了确保没有换行符,您可以使用除c
.
split -n #number
Run Code Online (Sandbox Code Playgroud)
通过 #number 块分割文件,因此您可以确保它们相等并且行中没有中断。示例
split -n 4 file.txt
Run Code Online (Sandbox Code Playgroud)
这会将 file.txt 分成 4 个块。
或者您可以按行数拆分
split -l #number-of-lines
Run Code Online (Sandbox Code Playgroud)
例子
split -l 200 file.txt
Run Code Online (Sandbox Code Playgroud)
这会将 file.txt 拆分为每个 200 行的文件。但这并不准确,因为最后一个文件的长度可能小于所选的数字。
现在关于命名。命令拆分的默认值是使用默认后缀“x”和默认前缀“aa”“ab”“ac”...
因此,为了更改这些默认值,您必须声明要使用的后缀。
在你的情况下,你可以使用
split -n #number file1_1.txt file1_1.
Run Code Online (Sandbox Code Playgroud)
输出会像 file1_1.aa file1_1.ab file1_1.ac
否则,您可以使用以下方法将默认前缀更改为数字 -d
split -n #number -d file1_1.txt file1_1.
Run Code Online (Sandbox Code Playgroud)
输出会像 file1_1.00 file1_1.01 file1_1.02
因此,除非您使用 someawk
或sed
REGEX,否则您无法通过默认拆分获得所需的命名。
现在从一个文件中读取一组文件让我们调用 files.list
while IFS= read -r file
do split -n #number -d "$file" "$file"
done < files.list
Run Code Online (Sandbox Code Playgroud)
根据第二个答案
gnu split one 的最新版本 (? 8.16) 可以使用 --additional-suffix 开关来控制生成的扩展名。从人分裂:
--additional-suffix=SUFFIX 在文件名后附加一个额外的后缀。所以在使用该选项时:
split -dl 10000 --additional-suffix=.txt words wrd 结果片段将自动以 .txt 结尾:
wrd00.txt wrd01.txt
因此,在您的情况下,如果您的拆分版本 >8.16,那么您可以像这样满足您的需求
split -n #number -d --additional-suffix=.txt file1_1.txt file1_1-
Run Code Online (Sandbox Code Playgroud)
所以输出会像
file1_1-00.txt file1_1-01.txt file1_1-02.txt .....
Run Code Online (Sandbox Code Playgroud)