私はスクリプトが進行中のファイルの行番号を印刷する方法を探しています。わかったけど$LINENO
、知ってみたら
echo 'Found foo in file' $(basename $foo) 'on line' $LINENO >> foo.csv
FooファイルにあるFooファイルの97行目に見つかったFooという結果を印刷します.csv
。スクリプト行ではなく、現在見ているファイルの行を印刷したいと思います。ファイルの行番号をどのようにエコーしますか? ?
ベストアンサー1
nl
ファイルに移動する前に、ファイル行に番号を付けることができます。
$ cat testfile
a
b
c
$ nl -b a testfile
1 a
2 b
3 c
デフォルトでは、空行には番号が付けられていない-b a
ため、これは必須です。nl
もちろん、ファイルが非常に大きい場合、ファイルを2回繰り返すので、これは非効率的です。
おそらく、より良いオプションは、ファイルを一度だけナビゲートしたい場合は、独自の行カウンタを使用することです。
COUNT=0
while read -r line; do
COUNT=$(( $COUNT + 1 ))
if [ ... ];then
# Do things to the line
# Make use of COUNT to show line number
fi
done < your_file_here
これは、ファイルを1行ずつ処理する場合にのみ機能します。grep
たとえば、次のように動作しません。