0

私は KornShell (ksh) スクリプトに取り組んでおり、sed 式でエラーが発生しました。100 個のエントリを持つ abc という名前のファイルがあり、abc ファイルのすべての行の 8 番目ごとの引数を変数に割り当てたいと考えています。

私はこのようなものを使用しました。

#!/bin/ksh
typeset -i x=1
while read line ; do
    var1=$(sed -n '$xp' abc.txt | awk '{print $8}')
    print $var1
    x="$x+1"
done < abc.txt
exit

変数 x を行番号として参照したいのですが、x 変数の参照で sed 式でエラーが発生します。私を助けてください。

4

1 に答える 1

2

あなたの引用は間違っています。一重引用符で囲まれたものはすべてそのままの文字列です。変数補間が必要な場合は、二重引用符を使用する必要があります (または、非常に特殊な状況では、引用符をまったく使用しないでください)。

すべてを Awk にリファクタリングすることもできます。些細なことですが、

var1=$(awk -v n="$x" 'NR==n{ print $8 }' abc.txt)

ただし、ファイルから 1 行を取得するためだけにファイル全体を再度読み取るメイン ループは、非常に非効率的です。多分あなたは次のようなものが欲しい

awk '{ print NR, $8 }' abc.txt |
while read x var1; do
    print "$var1"
    # presumably do something with $x too?
done
于 2013-04-25T05:33:05.013 に答える