1

我有一个文件,我想重新排列....

输入文件:

sublat
16 0.04 0.051
32 0.04 0.050
16 0.06 0.055
32 0.06 0.054
c2dotc2
16 0.04 0.464
32 0.04 0.624
16 0.06 0.505 
32 0.06 0.743

输出文件:

 A      B    sublat   c2dotc2

 0.04   16   0.051    0.464
 0.04   32   0.050    0.624    

 0.06   16   0.055    0.624 
 0.06   32   0.054    0.743

如何使用 awk、sed 实现这一目标?

4

1 回答 1

6

此 awk 脚本适用于您的要求:

awk 'BEGIN{OFS="\t";h="A\tB"}
    NF==1{h=h OFS $0;next}
    {x=$2OFS$1;r[x]=!r[x]?$3:r[x]OFS$3}
    END{print h;n=asorti(r,d);for(i=1;i<=n;i++)print d[i],r[d[i]]}' file

用你的数据测试:

kent$  cat file
sublat
16 0.04 0.051
32 0.04 0.050
16 0.06 0.055
32 0.06 0.054
c2dotc2
16 0.04 0.464
32 0.04 0.624
16 0.06 0.505 
32 0.06 0.743

kent$  awk 'BEGIN{OFS="\t";h="A\tB"}
        NF==1{h=h OFS $0;next}
        {x=$2OFS$1;r[x]=!r[x]?$3:r[x]OFS$3}
        END{print h;n=asorti(r,d);for(i=1;i<=n;i++)print d[i],r[d[i]]}' file
A       B       sublat  c2dotc2
0.04    16      0.051   0.464
0.04    32      0.050   0.624
0.06    16      0.055   0.505
0.06    32      0.054   0.743
于 2013-05-21T21:29:02.903 回答