[英]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(如果添加),您將獲得正確的順序,
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
可能會對您有所幫助,它將通過對第一個字段的第二個字符串(例如1D
或2D
等)進行排序來提供輸出:
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.