sedまたはawkを使用して変数行に変数を挿入する

sedまたはawkを使用して変数行に変数を挿入する

2つの変数(txtと行番号)があります。 x行にtxtを挿入したいです。

card=$(shuf -n1 shuffle.txt)
i=$(shuf -i1-52 -n1)

「カード」は私のtxtです。混在した「デッキ」でランダムに選択されたカードで、これをランダムな行に挿入したいと思います。 (i)

答え1

txt追加したいテキストが割り当てられ、テキストをi挿入する行番号が割り当てられると、目的の結果が出力されます。

$ awk -v line="$i" -v text="$txt" '{print} NR==line{print text}' /path/to/textfile

text追加する代わりに、指定された行番号(すでにあるテキストに追加)に追加するように少し変更します。後ろに上記のコードに示すように、既存の行i(自体):

$ awk -v line="$i" -v text="$txt" ' NR!=line{print} NR==line{print $0 text}' /path/to/textfile

答え2

ファイルをデータ構造として使用すると、アプリケーションに深刻なパフォーマンスが低下しますが、次のように行番号fooに変数の内容を挿入できます。ifile.txt

printf '%s\n' "${i}i" "$foo" . x | ex file.txt

変数にfoo改行が含まれている場合、いくつかの極端なケースがありますが、変数に有効な行番号がある限りi(つまり、行数より大きくすることはできませんfile.txt)、特殊文字などに関係なく機能します。

しかし、ファイルの行番号をデータ構造として使用することは非常に非効率的なシャッフル方法です。だから注意してください。

関連情報