【问题标题】:pivot table using awk command使用 awk 命令的数据透视表
【发布时间】:2018-02-13 07:15:06
【问题描述】:

我正在尝试使用 awk 旋转文件。 输入文件:

FA-2D_006 10000090fa180e49
FA-2D_011 10000090fa180e49
FA-3D_004 10000090fa180e49
FA-4D_005 10000090fa180e49
FA-2D_004 20010090fa180e49
FA-2D_008 20010090fa180e49
FA-3D_004 20010090fa180e49
FA-1D_006 20020090fa180e49
FA-4D_004 20020090fa180e49
FA-1D_006 20030090fa180e49
FA-4D_004 20030090fa180e49
FA-2D_006 20040090fa180e49
FA-2D_009 20040090fa180e49
FA-3D_005 20040090fa180e49
FA-1D_006 10000090fa180e48
FA-1D_011 10000090fa180e48
FA-2D_006 10000090fa180e48
FA-3D_005 10000090fa180e48
FA-4D_006 10000090fa180e48
FA-1D_004 20010090fa180e48
FA-2D_006 20010090fa180e48
FA-2D_011 20010090fa180e48
FA-3D_004 20010090fa180e48
FA-3D_006 20010090fa180e48
FA-4D_005 20010090fa180e48
FA-1D_006 20020090fa180e48
FA-2D_004 20020090fa180e48
FA-2D_010 20020090fa180e48
FA-3D_004 20020090fa180e48
FA-4D_004 20020090fa180e48
FA-3D_005 20030090fa180e48
FA-3D_007 20030090fa180e48
FA-1D_005 20040090fa180e48

期望的输出:

-----------------------------
FA-1D_004   20010090fa180e48
-----------------------------
FA-1D_005   20040090fa180e48
-----------------------------
FA-1D_006   10000090fa180e48
            20020090fa180e48
            20020090fa180e49
            20030090fa180e49
-----------------------------
FA-1D_011   10000090fa180e48
-----------------------------
FA-2D_004   20020090fa180e48
            20010090fa180e49
-----------------------------
FA-2D_006   10000090fa180e48
            10000090fa180e49
            20010090fa180e48
            20040090fa180e49
-----------------------------
FA-2D_008   20010090fa180e49
-----------------------------
FA-2D_009   20040090fa180e49
-----------------------------
FA-2D_011   20010090fa180e48
-----------------------------

FA-2D_011   10000090fa180e49
            20010090fa180e48
-----------------------------
FA-3D_004   10000090fa180e49
            20010090fa180e49
            20010090fa180e48
            20020090fa180e48
-----------------------------
FA-3D_005   10000090fa180e48
            20040090fa180e49
            20030090fa180e48
-----------------------------
FA-3D_006   20010090fa180e48
-----------------------------
FA-3D_007   20030090fa180e48
-----------------------------
FA-4D_004   20020090fa180e49
            20030090fa180e49
            20020090fa180e48    
-----------------------------
FA-4D_005   10000090fa180e49
            20010090fa180e48
-----------------------------
FA-4D_006   10000090fa180e48
-----------------------------

请告知如何使用 awk 创建枢轴以形成所需的输出。

【问题讨论】:

  • 欢迎来到 Stack Overflow,请使用代码标签 {} 为您的示例提供不清楚的地方。
  • 无法将问题与 o/p 联系起来。
  • 如果您希望有人帮助您,最好让他们轻松完成。在没有解释的情况下呈现一团难以理解的胡言乱语并不能解决问题。请简化您的示例以使用简短、易于区分的字符串并解释需要什么处理。谢谢。
  • 在这个网站上问了很多次,回答了很多次,随便搜一下就行了。

标签: shell awk scripting


【解决方案1】:

如果顺序无关紧要,那么

这里是单行:

awk '{k=$1 FS $2; if(!(k in t)){a[$1]=($1 in a? a[$1] RS sprintf("%*s",length($1)+1,"") :"")$2; t[k]}}END{s=sprintf("%0*s\n", length(k),""); gsub(/0/,"-",s); for(i in a)print s i,a[i] }' file

如果你添加 GNU awk,你会得到正确的顺序,

You may try here by pasting given data, in stdin tab

BEGIN{
    PROCINFO["sorted_in"]="@ind_str_asc"
}

更好的可读性:

awk 'BEGIN{
           PROCINFO["sorted_in"]="@ind_str_asc"
     }
     {
        k=$1 FS $2; 
        if(!(k in t))
        {
           a[$1]=($1 in a? a[$1] RS sprintf("%*s",length($1)+1,"") :"")$2; 
           t[k]
        }
     }
  END{
         s=sprintf("%0*s\n", length(k),""); 
         gsub(/0/,"-",s); 
         for(i in a)print s i,a[i] 
     }
    ' file

输入:

$ cat file
FA-2D_006 10000090fa180e49
FA-2D_011 10000090fa180e49
FA-3D_004 10000090fa180e49
FA-4D_005 10000090fa180e49
FA-2D_004 20010090fa180e49
FA-2D_008 20010090fa180e49
FA-3D_004 20010090fa180e49
FA-1D_006 20020090fa180e49
FA-4D_004 20020090fa180e49
FA-1D_006 20030090fa180e49
FA-4D_004 20030090fa180e49
FA-2D_006 20040090fa180e49
FA-2D_009 20040090fa180e49
FA-3D_005 20040090fa180e49
FA-1D_006 10000090fa180e48
FA-1D_011 10000090fa180e48
FA-2D_006 10000090fa180e48
FA-3D_005 10000090fa180e48
FA-4D_006 10000090fa180e48
FA-1D_004 20010090fa180e48
FA-2D_006 20010090fa180e48
FA-2D_011 20010090fa180e48
FA-3D_004 20010090fa180e48
FA-3D_006 20010090fa180e48
FA-4D_005 20010090fa180e48
FA-1D_006 20020090fa180e48
FA-2D_004 20020090fa180e48
FA-2D_010 20020090fa180e48
FA-3D_004 20020090fa180e48
FA-4D_004 20020090fa180e48
FA-3D_005 20030090fa180e48
FA-3D_007 20030090fa180e48
FA-1D_005 20040090fa180e48

结果 - 使用 GNU awk:

--------------------------
FA-1D_004 20010090fa180e48
--------------------------
FA-1D_005 20040090fa180e48
--------------------------
FA-1D_006 20020090fa180e49
          20030090fa180e49
          10000090fa180e48
          20020090fa180e48
--------------------------
FA-1D_011 10000090fa180e48
--------------------------
FA-2D_004 20010090fa180e49
          20020090fa180e48
--------------------------
FA-2D_006 10000090fa180e49
          20040090fa180e49
          10000090fa180e48
          20010090fa180e48
--------------------------
FA-2D_008 20010090fa180e49
--------------------------
FA-2D_009 20040090fa180e49
--------------------------
FA-2D_010 20020090fa180e48
--------------------------
FA-2D_011 10000090fa180e49
          20010090fa180e48
--------------------------
FA-3D_004 10000090fa180e49
          20010090fa180e49
          20010090fa180e48
          20020090fa180e48
--------------------------
FA-3D_005 20040090fa180e49
          10000090fa180e48
          20030090fa180e48
--------------------------
FA-3D_006 20010090fa180e48
--------------------------
FA-3D_007 20030090fa180e48
--------------------------
FA-4D_004 20020090fa180e49
          20030090fa180e49
          20020090fa180e48
--------------------------
FA-4D_005 10000090fa180e49
          20010090fa180e48
--------------------------
FA-4D_006 10000090fa180e48

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 2012-04-11
    • 2013-12-18
    相关资源
    最近更新 更多