クエリ列が2つの列の値の間にある場合は、他の列の値を取得します。

クエリ列が2つの列の値の間にある場合は、他の列の値を取得します。

そのため、給与情報(例:$ 2674)の列を含むファイルがあります。

indi  salary
   sam    2674
   john   6375
   max    9547

そのレベル(3列)の給与範囲(1列と2列)を含む別のファイル

salary_min salary_max Rank
2000           4000    Deputy
4000           6000    secretary
6000           8000    Assistant
8000           10000   Manager

さて、ファイル1の人々を給与に応じてそのレベルに割り当てたいと思います。

したがって、最終出力は

    indi    Rank
     sam    Deputy
     john   Assistant
     max    Manager

Linuxでは同じデータセット型を使用しますが、より大きなデータを使用してこれを達成するにはどうすればよいですか?

ベストアンサー1

給与と給与範囲が常に整数であり、給与範囲が重ならないと仮定すると、次のように機能できますbash

{ printf "indi Rank\n" ; 
join -o1.1,2.2 <(tail -n +2 file1 | sort -b -k2,2) -1 2 -2 1 \
<(awk 'FNR > 1{for (i=$1; i<$2; ++i) printf "%d %s\n", i, $3}' file2 | sort -k1,1) ;}
indi Rank
sam Deputy
john Assistant
max Manager

おすすめ記事