linux多个空行换成一个空行,Bash:只用空行在Linux中拆分10个文件

这个awk脚本将输入文件按指定大小的块拆分,并将每批记录写入单独的输出文件。用户可以自定义批次大小和输出文件名。脚本通过检查文件名变化进行初始化,并根据记录数滚动输出文件。它使用内部函数来计算每文件的记录数和处理文件名。运行该脚本,输入多个文件,将得到一系列带编号的输出文件。
摘要由CSDN通过智能技术生成

这是一个awk脚本,它将输入文件分解为batch_size块(带有分隔换行符的垃圾尾随记录).将其放入文件并将其更改为可执行文件:

#!/usr/bin/awk -f

BEGIN {RS=""; ORS="\n\n"; last_f=""; batch_size=20}

# perform setup whenever the filename changes

FILENAME!=last_f {r_per_f=calc_r_per_f(); incr_out(); last_f=FILENAME; fnum=1}

# write a record to an output file

{print $0 > out}

# after a batch,change the file name

(FNR%r_per_f)==0 {incr_out()}

# function to roll the file name

function incr_out() {close(out); fnum++; out=FILENAME"_"fnum".out"}

# function to get the number of records per file

function calc_r_per_f() {

cmd=sprintf( "grep \"^$\" %s | wc -l",FILENAME )

cmd | getline rcnt

close(cmd)

return( sprintf( "%d",rcnt/batch_size ) )

}

您可以更改begin块中的batch_size元素以调整每个输入文件的输出文件数,并且可以通过更改incr_out()中的out =赋值来更改输出文件名本身.

如果你将它放入一个名为awko的文件中,你可以像awko data1 data2一样运行它,并获取像data2_7.out这样的文件.当然,如果您的输入文件名具有扩展名等,则输出名称会比输出名称更可怕.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值