1

我正在学习 bash,这是一个简短的脚本,用于将十分位数分配给文件 $1 的第二列。

复杂的一点是在脚本中使用 awk,导致ambiguous redirects我运行脚本时。

我现在已经在 SAS 中完成了这项工作,但就像两行代码完成这项工作的想法一样。

如何在脚本中将总行数 (${N}) 传达给 awk?谢谢。

  N=$(wc -l < $1)
  cat $1 | sort -t' ' -k2gr,2 | awk '{$3=int((((NR-1)*10.0)/"${N}")+1);print $0}'
4

1 回答 1

2

您可以awk使用命令行从命令行设置变量-v

N=$(wc -l < "$1" | tr -d ' ')
sort -t' ' -k2gr,2 "$1" | awk -v n=$N '{$3=int((((NR-1)*10.0)/n)+1);print $0}'

我添加tr -d以摆脱wc -l其结果中的前导空格。

于 2013-09-27T17:19:53.523 回答