ターゲット日付と2つの列のセット(最初の列はランダムな数字で、2番目の列は最新から古い日付の順に)が与えられた場合、日付は最も近いが前の行で数字を探したいと思います。目標。たとえば、次のような状況が与えられます。
ターゲット:2018-12-03 19:09:56.250641
リスト:
5346 2018-12-06 17:44:35.010724
6347 2018-12-05 17:50:46.475593
7284 2018-12-04 18:32:11.665405
0298 2018-12-02 22:28:04.59453
1836 2018-12-02 22:27:47.585642
6653 2018-12-02 21:26:13.942103
9274 2018-12-02 21:23:28.318704
私は戻りたいです0298
。最もきれいな方法は何ですか?
答え1
日付はY-M-D H:M:S
順番になっているので、テキスト(辞書順または一般用語でアルファベット順)で比較できます。
2つではなく3つのフィールド(列)があります。最初の列の区切り文字が他の列の区切り文字と異なる場合。区切り文字を空白として表示するときに、それが空白かタブか他のものかを知る方法はありません。 3つの列がスペースまたはタブで区切られているとします。
この問題を解決するには、検索日の値に変数を設定し、次のコマンドを使用します。
s='2018-12-03 19:09:56.250641'
awk -vs="$s" '( $2" "$3 < s ){ print $1; exit }' infile
それは:
- フィールド 2 と 3 の関連付けられた値を検索された値と比較します。
- この比較が成立するとき(2部)
- 最初の列を印刷して終了します。
答え2
私も通常これを行いますawk
が、同じ結果を得るテキストツールパイプラインは次のとおりです。
$ echo "0000 $s" | sort -k2 - infile | grep -B1 "$s" | head -1 | cut -d" " -f1
0298