for (( a=1;a<=$(wc -l sedtest1);a++ ));do echo $a; done
私にエラーが発生します:
-bash: ((: a<=21 sedtest1: syntax error in expression (error token is "sedtest1")
答え1
の出力はwc -l sedtest1
次のようになります。
21 sedtest1
a <= 21 sedtest1
そうすれば、そのテストはそれほど無効なものになります。
これは、wc
ループが繰り返されるたびにコマンドが実行されることを意味します。各反復の間にファイルの内容がsedtest1
変更されない場合は、まずループ外の変数に行番号を格納することをお勧めします。
n=$(wc -l < sedtest1) # using redirection avoids the output containing the filename
for ((a = 0; a < n; a++)); do echo "$a"; done
私はまた、あなたがループを使用して非効率的でシェル以外の方法でテキストを処理しようとしていると疑います。読みたいかもしれませんシェルループを使用してテキストを処理するのはなぜ悪い習慣と見なされますか?。このように、ファイルの各行を繰り返すことは正しいアプローチではありません。
答え2
大丈夫です、私は本当に愚かです...
wc -l file
出力は「xファイル」です。
私がしなければならないことはこれです:
for (( a=1;a<=$(wc -l sedtest1|awk '{print $1}');a++ ));do echo $a; done