簡體   English   中英

使用 awk 命令的數據透視表

[英]pivot table using awk command

我正在嘗試使用 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 創建樞軸以形成所需的輸出。

如果順序無關緊要

這里是單線:

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(如果添加),您將獲得正確的順序,

您可以通過在stdin選項卡中粘貼給定數據來嘗試在此處

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

跟隨awk可能會對您有所幫助,它將通過對第一個字段的第二個字符串(例如1D2D等)進行排序來提供輸出:

sort -t"-" -k1.1 Input_file | awk -v s1="-----------------------------" '{a[$1]=a[$1]? a[$1] RS "\t\t" $NF:$NF} !b[$1]++{c[++i]=$1} END{for(j=1;j<=i;j++){print s1 RS c[j]"\t"a[c[j]]}}'

現在也添加非單一襯套形式的解決方案:

sort -t"-" -k1.1  Input_file |
awk -v s1="-----------------------------" '
{
  a[$1]=a[$1]? a[$1] RS "\t\t" $NF:$NF
}
!b[$1]++{
  c[++i]=$1
}
END{
  for(j=1;j<=i;j++){
    print s1 RS c[j]"\t"a[c[j]]}
}'

輸出如下:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM