ソートされたファイルで実行しようとしています。前の9文字と比較して、指定された値以下の最後の行を返します。
これは複数回実行され、VALUE
各実行に割り当てられ、以前の解決策を見つけた後、その行で検索を続ける必要があります。私は現在行番号を提供していますが、FNR
操作するためにBASH変数として保存することはできません。
私のfile
外観は次のとおりです。
093051721DABCD
093052654EEFGH
093053087TIJKL
$ VALUE=093052054;
$ cat file | awk '{if((substr($0,0,9) <= $VALUE)){print $0} else exit}' | tail -1
093051721DABCD
別の方法がありますか?
ベストアンサー1
VALUE=083551726
awk -v CMPVALUE="$VALUE" '{linevalue=substr($0,0,9)+0; CMPVALUE=CMPVALUE+0;
if(linevalue > CMPVALUE) exit; lineno=FNR};
END {if (lineno>0) print lineno " " $0;
else print "0 ";}' file
0
VALUE=083551726555
awk -v CMPVALUE="$VALUE" '{linevalue=substr($0,0,9)+0; CMPVALUE=CMPVALUE+0;
if(linevalue > CMPVALUE) exit; lineno=FNR};
END {if (lineno>0) print lineno " " $0;
else print "0 ";}' file
3 093053087TIJKL