入力ファイル1

入力ファイル1

2つの列を抽出して、すでに列でいっぱいの別のファイルの特定の場所に追加したいファイルがあります。

catファイル1を変数として作成し、catファイル2を変数として作成し、変数をエクスポートしてawkと組み合わせることができますか?以前は、誰かがこのようにして1行のテキストを書くのに役立ちましたが、ファイル全体で機能するかどうかはわかりません。

例:

入力ファイル1

Group F3D0 F3D1 F3D9 F3D     
Otu01 1627 1935 8335 241

入力ファイル2

oi1 oi2    
lk8 po8    

結果ファイル

oi1 oi2 Group F3D0 F3D1 F3D9 F3D     
lk8 po8 Otu01 1627 1935 8335 241

答え1

見せたら本当に必要なのは

paste -d ' ' file2 file1

最初の2つの列、2番目の列、残り、最後に最初の列を出力するなど、順番に、いくつかのシェルプロセスの置き換えを使用して、必要なほとんどすべての操作を実行cutできます。pastefile1file2file1file2

paste -d ' ' <(cut -d ' ' -f 1,2 file1) <(cut -d ' ' -f 2 file2) <(cut -d ' ' -f 3- file1) <(cut -d ' ' -f 1 file2)

あるいは、(おそらくより効率的かもしれません)、2つのファイルをそのまま貼り付けて結果をパイプして、特定の順序awkで特定の列を選択することもできます。

paste -d ' ' file1 file2 | awk '{print $1, $2, $NF, $3, $4, $5, $(NF-1)}'

または(必要に応じて)perl

paste -d ' ' file1 file2 | 
  perl -alne 'print join " ", @F[0,1],@F[6],@F[2..4],@F[5]'

関連情報