【问题标题】:Rearrange columns into a table将列重新排列到表中
【发布时间】:2013-10-26 01:22:33
【问题描述】:

我有一个这样的空格分隔文件:

GID_1 AID_1 2
GID_1 AID_2 1
GID_1 AID_3 3
GID_2 AID_1 3
GID_2 AID_2 1
GID_2 AID_3 2
GID_3 AID_1 1
GID_3 AID_2 1
GID_3 AID_3 3

我想将第 1 列和第 3 列转置为第 2 列,然后:

(X)   GID_1 GID_2 GID_3
AID_1  2     3     1
AID_2  1     1     1
AID_3  3     2     3

我放了一个“(X)”,因为这个换位会使该字段变为空白,这对我来说很好。

请问,谁能帮我解决这个问题?

【问题讨论】:

  • 这个问题与建议的重复问题完全不同。
  • @Thor 你是对的。在建议的重复行标签是唯一的。
  • 没错,我看不出“重复”在这里是如何应用的...我想通过“第 2 列”转置,而在副本中它们只是转置了所有内容...
  • @user2890714:我不认为这个过程叫换位,我更愿意说重新排列或改革甚至表格化。

标签: variables awk text-processing


【解决方案1】:

awk 解决方案

awk -F" |_" '
    {
    g=g>$2?g:$2
    a=a>$4?a:$4
    arr[$2 " " $4]=$5
    } 
    END {
    for (j=1;j<=g;j++)
        {
        printf "\tGID_%s",j
        }
    print ""
    for (i=1;i<=a;i++)
        {
        printf "AID_%s",i
        for (j=1;j<=g;j++)
            {
            printf "\t%s",arr[j " " i]
            }
        print ""
        }
    }
    ' file
        GID_1   GID_2   GID_3
AID_1   2       3       1
AID_2   1       1       1
AID_3   3       2       3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-18
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多