シェルスクリプトを使用して、循環順に行を列に置き換えます。

シェルスクリプトを使用して、循環順に行を列に置き換えます。

循環順に行を列に置き換え、2番目に表示される列見出しを無視したいと思います。

例えば

私は次のデータを持っています

[ID] 10
[NAME] TOM
[AGE] 25

[ID] 11
[NAME] SAM
[AGE] 26

出力は次のようにする必要があります

[ID]|[NAME]|[AGE]
10|TOM|25
11|SAM|26

次のawkコマンドを試してみました。

awk 'BWGIN { FS="]"; OFS="|";} {for (i=1; i<=NF; i++) a[i,NR]=$i
    max=(max<NF?NF:max)}
    END {for (i=1; i<=max; i++)
          {for (j=1; j<=NR; j++) 
              printf "%s%s", a[i,j], (j==NR?RS:FS)
          }
    }' source.txt

私は次のような結果を得る

[ID][NAME][AGE][ID][NAME][AGE]
10]TOM]25]11]SAM]25

列名は繰り返し繰り返され、Samのデータはラップする必要があります。

列名をハードコードしてその値を抽出せずにこれを達成するにはどうすればよいですか? 100以上の列があります。これを実現してくれてありがとう。

ベストアンサー1

そしてミラー、「xtab」から「csvlite」形式に変換:

$ mlr --ixtab --ocsvlite --ofs '|' cat source.txt
[ID]|[NAME]|[AGE]
10|TOM|25
11|SAM|26

おすすめ記事