在shell中分割文件
在 Shell 中,可以使用 split
命令或 awk
命令将文件按行数分割。以下是两种常用的方法:
方法 1:使用 split
命令
split
命令可以将文件分割成多个小文件。默认情况下,split
按行数分割文件。
(1)按每 30 行分割文件
bash
split -l 30 input_file output_prefix
-
-l 30
:每 30 行分割一次。 -
input_file
:需要分割的文件。 -
output_prefix
:输出文件的前缀(例如output_
)。
(2)示例
假设有一个文件 data.txt
,内容如下:
line1 line2 ... line90
运行以下命令:
bash
split -l 30 data.txt part_
会生成以下文件:
-
part_aa
(包含第 1-30 行) -
part_ab
(包含第 31-60 行) -
part_ac
(包含第 61-90 行)
(3)自定义输出文件名
如果希望输出文件名有数字后缀(如 part_01
、part_02
),可以使用 -d
选项:
bash
split -l 30 -d data.txt part_
生成的文件名为:
-
part_00
-
part_01
-
part_02
方法 2:使用 awk
命令
awk
是一个强大的文本处理工具,可以按行数分割文件。
(1)按每 30 行分割文件
bash
复制
awk 'NR%30==1 {file="output_" int((NR-1)/30) ".txt"} {print > file}' input_file
-
NR%30==1
:每 30 行切换一次输出文件。 -
file="output_" int((NR-1)/30) ".txt"
:生成输出文件名(如output_0.txt
、output_1.txt
)。 -
{print > file}
:将当前行写入对应的文件。
(2)示例
假设有一个文件 data.txt
,运行以下命令:
bash
awk 'NR%30==1 {file="output_" int((NR-1)/30) ".txt"} {print > file}' data.txt
会生成以下文件:
-
output_0.txt
(包含第 1-30 行) -
output_1.txt
(包含第 31-60 行) -
output_2.txt
(包含第 61-90 行)
方法 3:使用 csplit
命令
csplit
命令可以根据行数或模式分割文件。
(1)按每 30 行分割文件
bash
csplit input_file 30 {*}
-
30
:每 30 行分割一次。 -
{*}
:重复分割直到文件结束。
(2)示例
假设有一个文件 data.txt
,运行以下命令:
bash
csplit data.txt 30 {*}
会生成以下文件:
-
xx00
(包含第 1-30 行) -
xx01
(包含第 31-60 行) -
xx02
(包含第 61-90 行)