これは私のものです。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 way
1つの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