AWK 按行数拆分文件
  TnD0WQEygW8e 2023年11月05日 24 0

 

[root@ibiomed ~]# cat > test.sh
#!/bin/bash
## function: split file by specified line count
## parameter 1: file name to be splitted
## parameter 2: line number of new files

filename=$1
fileline=$2

echo "filename=$filename"
echo "fileline=$fileline"

awk -v count=$fileline 'BEGIN{i=0} {  print $0 > sprintf("%s_%d",FILENAME,i) ; if (NR>=(i+1)*count) { close(sprintf("%s_%d",FILENAME,i)); i++;} }' $filename

echo "=====finish====="

 

[root@ibiomed ~]# cat > temp.txt
>ACTL6A_1
GGATAGTTTCCAAGCTATTT
>ACTL6A_3
TTTGCTAATGGTCGTTCTAC
>ACTL6A_5
GTTGAAGGACATAGCCATCG
>ACTL6A_7
ACTGCAATTCCAGTCCACGA

 

[root@ibiomed ~]# chmod 777 test.sh

 

[root@ibiomed ~]# ./test.sh temp.txt 2

 

[root@ibiomed ~]# more temp.txt_0
>ACTL6A_1
GGATAGTTTCCAAGCTATTT

 

This works. New files with new file names, i.e. :

AWK 按行数拆分文件_i++

 

 

#!/bin/bash
## function: split file by specified line count
## parameter 1: file name to be splitted
## parameter 2: line number of new files
 
filename=$1
fileline=$2
 
echo "filename=$filename"
echo "fileline=$fileline"
 
#awk -v count=$fileline 'BEGIN{i=0} {  print $0 > sprintf("%s_%d",FILENAME,i) ; if (NR>=(i+1)*count) { close(sprintf("%s_%d",FILENAME,i)); i++;} }' $filename
awk -v count=$fileline 'BEGIN{i=0; NEWFILE="test"} { if (NR<(i+1)*count) { NEWFILE=gensub(/>/,"",1,$0);}  print $0 > sprintf("%s.fa",NEWFILE) ; if (NR>=(i+1)*count) { close(sprintf("%s.fa",NEWFILE)); i++;} }' $filename

echo "=====finish====="

 

 


 



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
TnD0WQEygW8e