転置された行の2番目の列を印刷します。

転置された行の2番目の列を印刷します。

次の例に示すように、スペースで区切られたテーブルがあります。

A 101
B 92 102
C 83 93 103
D 74 84 94 104

私はこれを得たいと思います:


  • サンプルAに関連する値を持つすべての2番目の列(サンプルBの最初の値で始まる)が1行に変わり(つまり、最初の行全体に続いて、各後続行の2番目のフィールドがオーム)に変わります。

  • 関連する値を持つサンプルBとすべての2番目の列(サンプルCの最初の値で始まる)が1つの行に変わり(つまり、2番目の行全体に続いて、後続の各行の2番目のフィールドがオーム)。
  • など。

私の出力の最初の4行のうち最初の5列は次のとおりです。

A 101 92 83 74 …
B 92 102 83 74 …
C 83 93 103 74 …
D 74 84 94 104 …

ベストアンサー1

awk '
{
    a[NR]=$0
    b[NR]=$2
}
END{
    for(i=1;i<=NR;i++){
        k=i+1
        printf("%s ",a[i])
        for(j=k;j<=NR;j++)
            printf("%s ",b[j])
        print ""
    }
}' table.file

まず、スクリプトは(行番号)で索引付けされた2つの配列(およびabを作成します。配列のすべての要素NRに配列のすべての要素を追加する代わりに、最初の要素を除外します。メモリが制限されている場合は、入力ファイルを2回渡して同じ操作を実行できます。abk

awk '
NR==FNR{
    b[NR]=$2
    rows=NR
    next
}
{
    printf("%s ",$0)
    for(j=FNR+1;j<=rows;j++)
        printf("%s ",b[j])
    print ""
    }
}' table.file table.file

おすすめ記事