1

私は bash を学んでいます。ファイル $1 の 2 列目に十分位数を割り当てるための短いスクリプトを次に示します。

複雑なのは、スクリプト内で awk を使用しているため、ambiguous redirectsスクリプトを実行したときに発生します。

私は今までにこれを SAS で行っていたでしょうが、2 行のコードで仕事をするという考えが好きです。

スクリプト内で行の総数 (${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 に答える