[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. :
#!/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====="
REF
https://www.cnblogs.com/cyttina/p/7471221.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。