
MYN
ファイル ( ) のn 行目 ( )x
を別のファイル ( y
) に追加するコマンドを作成するように依頼されました。これまでに行った操作は次のとおりです。
MYN=4
hey=$(awk 'NR==$MYN' x)
echo "$hey" >> y
しかし、なぜこれが機能しないのでしょうか?
答え1
awk
スクリプト内で変数を使用するために変数を渡すことが目的の場合は、awk
次のオプションを使用できます-v
。
hey=$(awk -v MYN=$MYN 'NR==MYN' x)
答え2
問題はわかりました。シングル クォートを使用していることです。シングル クォートを使用すると、Bash 変数が$MYN
展開されません。新しい変数を指定することで複雑になることもありますawk
が、非常に単純なので、ダブル クォートに切り替えることもできます。
awk "NR==$MYN" x
私は使用済みsed
しかし、あなたの論理に明らかな問題は見当たりません
MYN=4
sed "${MYN}q;d" x >> y
期待通りに動作するようです:
$ for i in $(seq 1 10); do echo $i >> x; done
$ sed "${MYN}q;d" x
4