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 吗?elif 工作?

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 回答