文字列の単語を混ぜる

文字列の単語を混ぜる

改行で区切られた文字列を含むテキストファイルがあります。私の問題は、各行を次のように処理することです。スペースを区切り文字として使用して、トークンの順序を混在させます。

たとえば、

入力する: 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()通常、秒単位の現在のエポック時間に基づいているためです)。

おすすめ記事