我怎样才能传递 list.txt 中的所有文件,如下所示
file1_1.txt
file1_2.txt
file1_3.txt
file1_4.txt
到split
命令(目录中还有其他 txt 文件)并使其返回编号的部分(假设 file1_1.txt 将被分成 4 个部分)
file1_1_1.txt;
file1_1_2.txt;
file1_1_3.txt;
file1_1_4.txt
等等....
答案1
为了确保没有换行,您可以使用除 之外的其他选项c
。
split -n #number
按 #number 个块分割文件,这样你就可以确保它们是相等的,并且不会出现断行的情况。示例
split -n 4 file.txt
这会将 file.txt 分成 4 个块。
或者你可以按行数拆分
split -l #number-of-lines
例子
split -l 200 file.txt
这会将 file.txt 拆分成每个文件 200 行。但这并不准确,因为所有文件的长度都相同,因为最后一个文件的长度可能小于所选的数字。
现在来谈谈命名。命令 split 的默认设置是使用默认后缀“x”和默认前缀“aa”、“ab”、“ac”...
因此,为了更改这些默认值,您必须声明要使用的后缀。
对于你的情况你可以使用
split -n #number file1_1.txt file1_1.
输出如下file1_1.aa file1_1.ab file1_1.ac
否则,你可以使用以下方法将默认前缀更改为数字-d
split -n #number -d file1_1.txt file1_1.
输出如下file1_1.00 file1_1.01 file1_1.02
awk
因此,除非您使用某些命名或sed
使用 REGEX,否则您无法使用默认拆分来获得所需的命名。
现在从文件中读取一组文件,称为files.list
while IFS= read -r file
do split -n #number -d "$file" "$file"
done < files.list
根据第二个答案
在 gnu split 的最新版本 (≥ 8.16) 中,可以使用 --additional-suffix 开关来控制生成的扩展。来自 man split:
--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-
所以输出就像
file1_1-00.txt file1_1-01.txt file1_1-02.txt .....
答案2
while read file; do split <some options> "$file"; done < list.txt
如果您的文件名可以包含空格或反斜杠,请改用以下命令:
while IFS= read -r file; do split <some options> "$file"; done < list.txt
答案3
以下是我的粗略台词:
awk -F'.' '{$3=$1;print $1"."$2" "$3"_"}' list.txt | xargs -n2 split --numeric-suffixes=1 -n 4 --suffix-length=1 --additional-suffix=".txt"
解释:
该文件包含以下条目:
file1_1.txt
file1_2.txt
file1_3.txt
file1_4.txt
我们用 awk 取出这些,并使用点作为分隔符,创建两列列表
file1_1.txt file1_1_
file1_2.txt file1_2_
file1_3.txt file1_3_
file1_4.txt file1_4_
接下来,xargs 获取该输出,每次执行两个条目 (-n2),然后运行 split,使用从 1 开始的数字后缀,拆分为 4 个文件,并在末尾添加“.txt”。以下是该单行程序的演示: