1

私はbashを初めて使用し、csvファイルをソートしてから出力するか、入力に基づいて保存するプログラムを持っています。しかし、保存のために if ステートメントの後でそれを保持し続けます。

if [ "$1" = "-f" ]; then
    sort -r -t, -k5 $1>sorted.csv
elif [ "$2" = "" ]; then
    sort -r -t, -k5 $1
fi

ファイル $1 をソートして sorted.csv に保存するべきではありませんか? エリフの仕業?

4

2 に答える 2

5

sortデータ待ちです。CSV ファイルをスクリプトにリダイレクトしましたか? それとも、実際に に渡すつもりでし"$2"testか?

于 2013-09-05T22:01:18.457 に答える
3

最初の if テストはパラメータ $1 を見て、そのパラメータが '-f' の場合に何かを行います。その何かは、次のように評価される「ソート」呼び出しで同じパラメーターを使用しています。

sort -r -t, -k5 -f > sorted.csv

これは、ソートして sorted.csv に保存したいファイル コンテンツをスクリプトにパイプする必要があるため、ハングします。ハングしたときは、いつでもcsvファイルの内容を入力してCTRL-Dで終了できると思います:-)。「-f」は、私のマシンでフォールドケースソートを行います。

ファイル名を渡すことを意図していた場合:

if [ $# -gt 1 ]
then
   if [ $1 = "-f" ]
   then
      # assume $2 not a control switch for sort but a file name
      sort -r -t, -k5 $2 > sorted.csv
   fi
fi
if [ $# -eq 1 ]
then
   # assume $1 not a control switch for sort but a file name
   sort -r -t, -k5 $1
fi
于 2013-09-06T04:14:42.507 に答える