2024-09-29 17:22:58 发布
网友
我有以下输出
SRR51XXXX 5 6 7 SRR51XXYY 8 9 1 2
等等
所以每个头文件都以SRR51开头,然后是唯一的4位数字 比如
SRR513XXXX SRR513XXXY 5 8 6 9 7 1
Fig to show the data
一种简单的bash方法:
csplit -s -z -f columns sample.txt '/^SRR51/' '{*}' paste columns* > pivot.txt rm columns*
这将使用^{}根据^SRR51模式将文件拆分为单个文件,然后^{}所有“列”用^{分隔。最后,rm删除临时列文件
如果您坚持使用bsd样式的csplit,请使用:
csplit -s -f columns sample.txt '%^SRR51%' '/^SRR51/' "{$( expr $(grep -c '^SRR51') + 1)}"
如果您想让它们“对齐”,请使用column -t,但这不是POSIX
column -t
awk版本:
BEGIN { field = -1 row = 0 maxrow = 0; } /^SRR/ { row = 0 field++ } { if (!width[field] || width[field] < length($0)) { width[field] = length($0); } a[row++,field] = $0; if (row > maxrow) { maxrow = row } } END { for (j = 0; j <= field; j++) { printf " %-"width[j]"s ", a[0,j] } printf "\n"; for (i = 1; i < maxrow; i++) { for (j = 0; j <= field; j++) { printf(" %"width[j]"s ", a[i,j]) } printf "\n"; } }
要运行,请保存到col.awk文件中,然后运行awk -f col.awk sample.txt
awk -f col.awk sample.txt
注意:标题左对齐,数字右对齐
在线演示-https://ideone.com/H6hUcq
awk '/^SRR/{r=1;c++}{a[r++,c]=$1}END{while(r>i++){while(c>j++){printf "%s\t", a[i,j]}printf "\n";j=0}}' /path/to/my/file.txt
一种简单的bash方法:
这将使用^{} 根据^SRR51模式将文件拆分为单个文件,然后^{} 所有“列”用^{分隔。最后,rm删除临时列文件
如果您坚持使用bsd样式的csplit,请使用:
如果您想让它们“对齐”,请使用
column -t
,但这不是POSIXawk版本:
要运行,请保存到col.awk文件中,然后运行
awk -f col.awk sample.txt
注意:标题左对齐,数字右对齐
在线演示-https://ideone.com/H6hUcq
相关问题 更多 >
编程相关推荐