2

私は次の構造を持っています(1行のみ)

col1  col2  col3  col4
----------------------
12    34    14    10

私がしなければならないのは、col2とcol4をフェッチし、その値をシェルで使用する必要があることです。

a=$(awk 'NR<2{$2}')
b=$(awk'NR<2{$4}')

シェルスクリプトでaとbを使用する必要があります。しかし、私は2回使用しているので、これは良い考えではありませんawk。代わりに、このように値を取得しています。

awk'NR<2{ a=$2;b=$4}'

しかし、シェルでこのaとbをどのように使用できるかわかりません。

4

3 に答える 3

4

eval を使用すると、1 つの awk コマンドでより多くのシェル変数を割り当てることができます。以下のテストを参照してください。

kent$  echo $a,$b
,

kent$  cat test
col1  col2  col3  col4
----------------------
12    34    14    10

kent$  eval $(awk 'NR==3{print "a="$2;print "b="$4}' test)

kent$  echo $a,$b
34,10

入力例をヘッダー/タイトルなどでコピーしただけなので、スクリプトではデータ行はNR = 3です。それがあなたのケースにない場合は、調整することができます。

于 2012-11-30T09:31:55.540 に答える
1

readビルトインはここで役立ちます。

read _ a _ b _ < <( tail -n +3 data.txt)  # Assign the columns you don't care about to _
echo $a,$b

これにより、 の使用がeval回避されます。別のオプションが見つかれば、通常は使用を避ける必要があります。

于 2012-11-30T13:42:38.000 に答える
0
$ v=( $(awk 'NR==3{print $2 ORS $4}' file) )
$ a="${v[0]}"
$ b="${v[1]}"
$ echo "$a,$b"
34,10
于 2012-11-30T14:58:52.110 に答える