2つのファイルがあります。ファイル1から一致する名前を取得してファイル1の内容全体を印刷し、最大値を持つ2番目のファイルを使用してファイル1に4番目の列(exp)を追加する必要があります。
file1
name value1 value2 value3
hat_197050 30.5348 37.2617 1.2203
hat_160460 20.8679 21.0134 1.00697
hat_092950 63.875 63.2321 0.989935
file2
hat_160460 AA:0003700,AA:0003707,AA:0005634,AA:0006355,AA:0043401
hat_160460 AA:0003700,AA:0003707
希望の出力:
name value1 value2 value3 exp
hat_197050 30.5348 37.2617 1.2203
hat_160460 20.8679 21.0134 1.00697 AA:0003700,AA:0003707,AA:0005634,AA:0006355,AA:0043401
hat_092950 63.875 63.2321 0.989935
私はこれら2つを使用して一致する列を取得したいのですが、awk
一致する列のみを提供します。
awk 'FNR==NR{a[$1]=$0;next}{if(b=a[$1]){print }}' file1 file2 > matched
this command to get the file2 with max field
awk 'BEGIN { FS = "," } ;{if (NF > max) {max = NF ; line =$0}} END{print line}' file2
私が欲しいものを得るために2つを組み合わせる方法がわかりません。どんな提案でも読んでいただきありがとうございます。
答え1
awk '
FNR == NR {
# Read file1
i=$1;
sub($1 FS, "");
a[i]=$0; next;
}
(FNR < NR) && (FNR == 1) {
# add new column header to title row (first line of file1)
print $0 "exp"; next;
}
{
# Read file2 and append matching line from file1
print $0 a[$1];
}
' file2 file1
上記のソリューションでは、一致する最初の列(したがってbefore仕様)を抽出するためfile2
にbeforeを読みます。また、ソリューションは次のものを使用します。file1
file2
file1
最後のゲームin file2
(あなたの例では、hat_160460
inが2回表示されますfile2
)。
結果:
file1 name value1 value2 value3 exp
hat_197050 30.5348 37.2617 1.2203
hat_160460 20.8679 21.0134 1.00697 AA:0003700,AA:0003707
hat_092950 63.875 63.2321 0.989935
使いたいなら最初のゲームfile2
、FNR == NR
上の部分を次に交換してください。
FNR == NR {
# Read file1
i=$1;
sub($1 FS, "");
if (! a[i]) a[i]=$0;
next;
}
結果:
file1 name value1 value2 value3 exp
hat_197050 30.5348 37.2617 1.2203
hat_160460 20.8679 21.0134 1.00697 AA:0003700,AA:0003707,AA:0005634,AA:0006355,AA:0043401
hat_092950 63.875 63.2321 0.989935