我如何使用随机在Red Hat Linux的标准工具在一个文件中的行?

我没有shuf命令,所以我在寻找类似的东西,完成同样的任务perlawk需要一行代码。

有帮助吗?

解决方案

和Perl的一个班轮你拿!

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

它使用的模块,但模块Perl代码分配的一部分。如果这还不够好,你可以考虑滚动你自己的。

我尝试使用此与-i标志(“编辑就地”)把它编辑该文件。该文件表明,它应该工作,但事实并非如此。它仍然显示洗牌后的文件输出到标准输出,但这次它删除原始。我建议你不要使用它。

考虑一个外壳脚本:

#!/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

未经测试,但希望的工作原理。

其他提示

嗯,让不忘记

sort --random-sort

shuf是最好的方式。

sort -R是十分缓慢。我只是试图梳理5GB文件。我在2.5小时后放弃了。然后shuf排序它在一分钟。

cat yourfile.txt | while IFS= read -r f; do printf "%05d %s\n" "$RANDOM" "$f"; done | sort -n | cut -c7-

读取文件,在前面加上一个随机数的每一行,排序这些随机前缀的文件,切前缀之后。单行应在任何半现代壳工作。

编辑:并入理查德汉森的言论

一个单行为蟒:

python -c "import random, sys; lines = open(sys.argv[1]).readlines(); random.shuffle(lines); print ''.join(lines)," myFile

和用于打印只是一个单一的随机行:

python -c "import random, sys; print random.choice(open(sys.argv[1]).readlines())," myFile

不过看到对Python的random.shuffle()的缺点,这个帖子。它不会与许多(超过2080)元件很好地工作。

相关吉姆的回答是:

~/.bashrc包含以下内容:

unsort ()
{
    LC_ALL=C sort -R "$@"
}

使用GNU的coreutils的排序,-R = --random-sort,它产生每行和排序由它的随机散列。随机哈希实际上不会在一些较老的(车)版本进行了一些语言环境中使用,使其恢复正常有序输出,这就是为什么我设置LC_ALL=C


相关克里斯的回答:

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

是一个稍短单行。 (-Mmodule=a,b,c-e 'use module qw(a b c);'简写。)

之所以给它一个简单的-i不就地洗牌的工作是因为Perl预计,print发生在同一回路中的文件被读出,并print shuffle <>不输出,直到所有的输入文件后就一直读和关闭。

作为一个较短的变通方法,

perl -MList::Util=shuffle -i -ne'BEGIN{undef$/}print shuffle split/^/m'

将就地洗牌文件。 (-n的意思是“包在一个while (<>) {...}循环的代码; BEGIN{undef$/}令Perl上的文件-AT-A-时间,而不是线-AT-A-时间操作,并且需要split/^/m因为$_=<>已与整个文件,而不是被隐式进行线。)

当我安装用自制的coreutils

brew install coreutils

shuf变得可用作为n

的Mac OS X和Darwinports:

sudo port install unsort
cat $file | unsort | ...

FreeBSD有它自己的随机效用:

cat $file | random | ...

这是在/ usr /游戏/随机的,因此,如果您还没有安装游戏,你的运气了。

您可以考虑像类似textproc /兰特或类似textproc / msort安装端口。这些很可能是可用于Linux和/或Mac OS X,如果便携性是一个问题。

在OSX,从敛最新 http://ftp.gnu.org/gnu/coreutils/ 和类似

./配置 使 须藤使安装

...应该给你的/ usr / local / bin目录/排序--random排序

不搞乱的/ usr /斌/排序

或者从MacPorts的得到它:

$ sudo port install coreutils

和/或

$ /opt/local//libexec/gnubin/sort --random-sort
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top