改行で区切られた文字列を含むテキストファイルがあります。私の問題は、各行を次のように処理することです。スペースを区切り文字として使用して、トークンの順序を混在させます。
たとえば、
入力する:
A B C
出力:
C A B
もちろん、コマンド/スクリプトを繰り返し実行する場合は、別の順序を指定する必要があります。
私の現在のソリューション(1行のテキスト):
$ cat <file> | tr " " "\n" | shuf | tr "\n" " "
複数行のテキストファイルを処理するための良い(より良い)コマンドラインの組み合わせはありますか?
ベストアンサー1
POSIXlyでは、これを比較的効率的に実行できます(確かに、awk
すべての入力行に対して1つ以上のGNUユーティリティを実行するよりも効率的です)。shuf
awk '
BEGIN {srand()}
{
for (i = 1; i <= NF; i++) {
r = int(rand() * NF) + 1
x = $r; $r = $i; $i = x
}
print
}' < your-file
(ほとんどのawk
実装では、同じコマンドを同じ秒以内に2回実行すると同じ結果が得られます。使用されるデフォルトのランダムシードはsrand()
通常、秒単位の現在のエポック時間に基づいているためです)。