如何使用awk基于列中的值写入标题名称
我有一个tab delim输入文件,其中包含>100列,值范围为0-30。下面是一个包含6列4行的示例输入文件。第一行是标题行如何使用awk基于列中的值写入标题名称,awk,Awk,我有一个tab delim输入文件,其中包含>100列,值范围为0-30。下面是一个包含6列4行的示例输入文件。第一行是标题行 ID S1 S2 S3 S4 S5 CNV1 2 0 2 0 2 CNV2 6 2 2 2 1 CNV3 2 1 3 2 4 我需要将列创建为0、1、2、3、4和>4,并使用与inputfile中列的值对应的标题名称填充列。示例输出如下所示: Output: ID 0
ID S1 S2 S3 S4 S5
CNV1 2 0 2 0 2
CNV2 6 2 2 2 1
CNV3 2 1 3 2 4
我需要将列创建为0、1、2、3、4和>4,并使用与inputfile中列的值对应的标题名称填充列。示例输出如下所示:
Output:
ID 0 1 2 3 4 >4
CNV1 S2,S4 S1,S3,S5
CNV2 S5 S2,S3,S4 S1
CNV3 S2 S1,S4 S3 S5
非常感谢您的帮助。
awk
向救援人员致敬
$ awk -v OFS='\t' 'NR==1{split($0,h); print $1,0,1,2,3,4,">4"; next}
{delete a;
for(i=2;i<=NF;i++)
{if($i>4)$i=4;
a[$i]=(($i in a)?a[$i]","h[i]:h[i])}
printf "%s\t",$1;
for(i=0;i<=NF;i++) printf "%s\t", (a[i]?a[i]:" ");
print ""}' file
ID 0 1 2 3 4 >4
CNV1 S2,S4 S1,S3,S5
CNV2 S5 S2,S3,S4 S1
CNV3 S2 S1,S4 S3 S5
$awk-vofs='\t''NR==1{split($0,h);打印$1,0,1,2,3,4,“>4”;下一步}
{删除一项;
(i=2;i4)$i=4;
a[$i]=((a中的$i)?a[$i],“h[i]:h[i])
printf“%s\t”,$1;
对于(i=0;i请尝试使用任意数量的值和标题的此版本:
awk '
FNR==1 {for(i=2;i<=NF;i++) {headers[i]=$i}}
FNR>1 {
if (maxrow<FNR) { maxrow=FNR}
rowheaders[FNR]=$1;
for(i=2;i<=NF;i++) {
if (maxvalue<$i) {maxvalue=$i}
if(!values[$1,$i]) {
values[$1,$i]=headers[i]
} else {
values[$1,$i]=values[$1,$i] "," headers[i]
}
}
}
END { for (i=2;i<=maxrow;i++) { for (j=0;j<=maxvalue;j++) { if (values[rowheaders[i],j] && maxlen<length(values[rowheaders[i],j])) { maxlen=length(values[rowheaders[i],j])}}}
printf("%" maxlen "s","ID"); for (i=0;i<=maxvalue;i++) { printf("%s%" maxlen "s",OFS,i)}; printf("\n")
for (i=2;i<=maxrow;i++) {
printf ("%" maxlen "s",rowheaders[i])
for (j=0;j<=maxvalue;j++) {
if (!values[rowheaders[i],j]) {
printf("%s%" maxlen "s",OFS," ")
}
else {
printf("%s%" maxlen "s",OFS,values[rowheaders[i],j])
}
}
printf("\n")
}
}'
awk'
FNR==1{for(i=2;i1{
如果(maxrow
$ awk '
FNR==1 {for(i=2;i<=NF;i++) {headers[i]=$i}}
FNR>1 {
if (maxrow<FNR) { maxrow=FNR}
rowheaders[FNR]=$1;
for(i=2;i<=NF;i++) {
if (maxvalue<$i) {maxvalue=$i}
if(!values[$1,$i]) {
values[$1,$i]=headers[i]
} else {
values[$1,$i]=values[$1,$i] "," headers[i]
}
}
}
END { for (i=2;i<=maxrow;i++) { for (j=0;j<=maxvalue;j++) { if (values[rowheaders[i],j] && maxlen<length(values[rowheaders[i],j])) { maxlen=length(values[rowheaders[i],j])}}}
printf("%" maxlen "s","ID"); for (i=0;i<=maxvalue;i++) { printf("%s%" maxlen "s",OFS,i)}; printf("\n")
for (i=2;i<=maxrow;i++) {
printf ("%" maxlen "s",rowheaders[i])
for (j=0;j<=maxvalue;j++) {
if (!values[rowheaders[i],j]) {
printf("%s%" maxlen "s",OFS," ")
}
else {
printf("%s%" maxlen "s",OFS,values[rowheaders[i],j])
}
}
printf("\n")
}
}' inputfile
ID 0 1 2 3 4 5 6
CNV1 S2,S4 S1,S3,S5
CNV2 S5 S2,S3,S4 S1
CNV3 S2 S1,S4 S3 S5