ファイルxのn行目をファイルyの末尾に追加します。

ファイルxのn行目をファイルyの末尾に追加します。

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

関連情報