1. ホーム
  2. linux

[解決済み] Red Hat Linux の標準ツールでファイルの行をランダムにする方法は?

2022-11-18 14:16:16

質問

Red Hat Linux の標準ツールを使って、ファイルの行をランダムにするにはどうしたらよいでしょうか。

私は shuf コマンドのようなものを探しています。 perl または awk のような、同じタスクを達成するワンライナーもあります。

どのように解決するのですか?

そして、Perlのワンライナーです。

perl -MList::Util -e 'print List::Util::shuffle <>'

これはモジュールを使っていますが、そのモジュールはPerlのコード配布の一部です。もしそれが十分でないなら、自分でロールバックすることを検討してもよいでしょう。

で使ってみましたが -i フラグ ("edit-in-place") を使用して、ファイルを編集してみました。ドキュメントによると、うまくいくはずなのですが、そうではありません。シャッフルされたファイルは標準出力に表示されますが、今度はオリジナルを削除してしまいます。私は、これを使用しないことをお勧めします。

シェルスクリプトを考えてみましょう。

#!/bin/sh

if [[ $# -eq 0 ]]
then
  echo "Usage: $0 [file ...]"
  exit 1
fi

for i in "$@"
do
  perl -MList::Util -e 'print List::Util::shuffle <>' $i > $i.new
  if [[ `wc -c $i` -eq `wc -c $i.new` ]]
  then
    mv $i.new $i
  else
    echo "Error for file $i!"
  fi
done

未検証ですが、うまくいけば動作します。