awkを使用して別々のファイルから列データを選択する

awkを使用して別々のファイルから列データを選択する

私は経験豊富なLinuxユーザーではありません。 2つの別々のファイルから列データを選択し、awkを使用して3番目のファイルに書き込もうとします。ファイルを一緒に貼り付けてみました。つまり、file1、file2を貼り付けてからawkを貼り付けましたが、データが次の行に追加されます(交互に)。

データは次のとおりです。

ファイル1

HZ880   0.00 

HAM86   1.13 

HAM40   1.60 

ファイル2

HZ880  -31.816826 115.757963   35.8909  0.0170  -.0170

HAM86  -31.824923 115.761507   33.6108  0.0165  -.0165

HAM40  -31.828528 115.762380   38.8434  0.0163  -.0163

列2(ファイル1)と列4(ファイル2)を使用して新しいファイルを作成するには?

私は以下を試しました:

paste ${LEV_IN1} ${LEV_IN2} | awk '{print $2,$4}' > ${TEMP2}

ここで、LEV_IN1file1LEV_IN2はfile2です。

私は何が間違っていましたか?

答え1

最初にファイル名を順番に指定すると、file1のすべての列が計算され、次の数字からfile2まで計算が開始されます。これは、file1の2列とfile2の開始列3、4、5などを計算することを意味します。

$6file2の列4を取得するには、コマンドがfile2から3から計算され始めるので、作成する必要があります。

これにより、必要な出力が得られます($6file2の別の列を印刷するには、別の数字に変更してください)。

paste file1 file2 | awk '{print $2 " " $6}' > outputfile.txt

別の方法(ここでは$4file2の列4を参照):

paste <(awk '{print $2}' file1) <(awk '{print $4}' file2) > outputfile.txt

出力:

0.00    35.8909

1.13    33.6108

1.60    38.8434

純粋なawk解決策は次のとおりです。

awk 'NR==FNR{a[NR]=$2; next} {print a[FNR], $4}' file1 file2 > outputfile.txt

答え2

awk作業には不要

join --nocheck-order -o 1.2,2.4 file1 file2

または

paste file1 file2 | tr -s ' ' '\t' | cut -f2,6

関連情報