我怎么可以随机在文件中使用标准工具在Red Hat Linux上线?
题
我如何使用随机在Red Hat Linux的标准工具在一个文件中的行?
我没有shuf
命令,所以我在寻找类似的东西,完成同样的任务perl
或awk
需要一行代码。
解决方案
和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