その行から検索を続けるには、AWK FNRをBash変数として保存します。

その行から検索を続けるには、AWK FNRをBash変数として保存します。

ソートされたファイルで実行しようとしています。前の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

おすすめ記事