awkを介して2つのファイルをマージする方法

awkを介して2つのファイルをマージする方法

これは私のものです。1.file

             id
             a1
             a2
             a3
             a4

これは私のものです。2.file

             DW  1  2  3  4
             KD  2  3  4  5
             LBJ 4  4  4  4

最終ファイルを受け取りたいです。

             id  a1 a2 a3 a4
             DW  1  2  3  4
             KD  2  3  4  5
             LBJ 4  4  4  4
            

頑張る

cat 1.file |tr "\n" "\t"|sed -e 's/,$/\n/'

それから

cat 1.file 2.file >> fina.file

awkしかし、私は方法を探したいです。

答え1

$ column -t <( paste -s 1.file ) 2.file
id   a1  a2  a3  a4
DW   1   2   3   4
KD   2   3   4   5
LBJ  4   4   4   4

行は1.file単一行ヘッダーに変換され、paste -sそのcolumn -tヘッダーをのデータと並べ替えるために使用されます2.file

上記は、プロセスの置き換えを理解するシェルを使用していると仮定しています<(...)。そうでない場合は、代わりに以下を使用してください。

paste -s 1.file | column -t /dev/stdin 2.file

答え2

I want to get the awk way1つのawkスクリプトですべての操作を実行する方法を学びたいとします。

$ awk 'NR==FNR{ hdr=hdr sep $0; sep=OFS; next} FNR==1{ print hdr } 1' 1.file 2.file
id a1 a2 a3 a4
DW  1  2  3  4
KD  2  3  4  5
LBJ 4  4  4  4

答え3

次の操作が実行されます。

awk '{ORS=(NR%5?FS:RS)}1' 1.file >final.file
cat 2.file >>final.file

このawkコードは、連続した5行を1行に印刷します。次に、cat残りのファイルを追加します。

答え4

インデントを維持する:

cat <( fmt 1.file ) 2.file
             id a1 a2 a3 a4
             DW  1  2  3  4
             KD  2  3  4  5
             LBJ 4  4  4  4

関連情報