5

私はこのようなことをしようとしています:

  if [ $(wc -l $f) -lt 2 ]

$f はファイルです。これを実行すると、次のエラー メッセージが表示されます。

  [: too many arguments

私のコマンドでこの行を修正する方法を知っている人はいますか?

完全なスクリプトは次のとおりです。

for f in *.csv
do
  if [ $(wc -l $f) -lt 2 ]
      then
      echo $f
      fi
done
4

3 に答える 3

8

少なくとも私の場合、wc -l filename出力32 filenameは32行です。したがって、行数の後にファイル名を削除する必要があります。あなたはからあなたのコードを変更することができます

if [ $(wc -l $f) -lt 2 ]

if [ $(wc -l $f | cut -f1 -d' ') -lt 2 ]

また

if [ $(wc -l < $f) -lt 2 ]

問題が解決しない場合は、の出力をwc -l filename質問に追加するか、コメントとして追加してください。

于 2013-03-12T13:56:48.663 に答える
2

これを試して :

  if (( $(wc -l < "$f") < 2 ))

または、構文を保持したい場合:

  if [ $(wc -l < "$f") -lt 2 ]

ノート

((...))は算術コマンドであり、式がゼロ以外の場合は終了ステータス0を返し、式がゼロの場合は1を返します。副作用(割り当て)が必要な場合は、「let」の同義語としても使用されます。http://mywiki.wooledge.org/ArithmeticExpressionを参照してください

于 2013-03-12T13:56:29.400 に答える
0

必要なのはおそらく

if [ `cat $f | wc -l` -lt 2 ]

それ以外の

if [ $(wc -l $f) -lt 2 ]
于 2013-03-12T13:52:36.963 に答える