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
に変数の内容を挿入できます。i
file.txt
printf '%s\n' "${i}i" "$foo" . x | ex file.txt
変数にfoo
改行が含まれている場合、いくつかの極端なケースがありますが、変数に有効な行番号がある限りi
(つまり、行数より大きくすることはできませんfile.txt
)、特殊文字などに関係なく機能します。
しかし、ファイルの行番号をデータ構造として使用することは非常に非効率的なシャッフル方法です。だから注意してください。