在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_01part_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.txtoutput_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 行)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值