私は経験豊富な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_IN1
file1LEV_IN2
はfile2です。
私は何が間違っていましたか?
答え1
最初にファイル名を順番に指定すると、file1のすべての列が計算され、次の数字からfile2まで計算が開始されます。これは、file1の2列とfile2の開始列3、4、5などを計算することを意味します。
$6
file2の列4を取得するには、コマンドがfile2から3から計算され始めるので、作成する必要があります。
これにより、必要な出力が得られます($6
file2の別の列を印刷するには、別の数字に変更してください)。
paste file1 file2 | awk '{print $2 " " $6}' > outputfile.txt
別の方法(ここでは$4
file2の列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