如何按行数分割文件并依据首列值重命名?求awk解决方案
按4行分组并以首行首列命名分割文件的解决方案
我有一个需要按每4行分割的文件,每组4行的格式如下:
sample_id 145 WORD 2847 42 301M = 2086 -1062 ACAAAAAAGAAAAAATGAGTTACCGTACTGTCTGTGAGTGATGCATACTTTT |||||||||||||| ||| || |||||| |||| |||||||||| |||| TTAAAAAAGAAAAAATCAGTAACAGTACTGGATGTGGGTGATGCATATTTTT目前我使用命令:
split -l 4 file.txt,希望将输出文件以每组首行第一列的值命名为xxx.txt,请问该如何实现?是否有awk解决方案?
awk实现方案
可以用awk直接完成这个需求,命令如下:
awk 'NR%4==1{close(f); f=$1".txt"} {print > f}' file.txt
命令解释
NR%4==1:当处理到第1、5、9…行(每组的首行)时触发后续操作close(f):关闭之前打开的文件句柄,避免因同时打开过多文件报错f=$1".txt":取当前首行的第一列值,拼接.txt作为输出文件名{print > f}:将当前行写入目标文件f
补充说明
如果存在多组首行第一列值重复的情况,后面的组内容会覆盖前面的文件。要避免覆盖,可以给文件名加上序号:
awk 'NR%4==1{close(f); cnt++; f=$1"_"cnt".txt"} {print > f}' file.txt
这样重复的标识会生成sample_id_1.txt、sample_id_2.txt这类带编号的文件。
内容的提问来源于stack exchange,提问作者SaltedPork
相关产品推荐
相关产品推荐

