随机随机整理大型文本文件中的行


11

我有一个约1GB的文本文件,大约有6k行(每行都很长),我需要随机地对其行进行随机排序。可能吗?可能与awk?

Answers:


19

您可以使用GNU coreutils中shuf命令。该实用程序非常快,只需1分钟即可完成1 GB文件的重新整理。

下面的命令可能只适合您的情况,因为shuf在打开输出文件之前,它将读取完整的输入:

$ shuf -o File.txt < File.txt

谢谢,我忘了提到我在OSX上,是否有等效功能?
2014年

6
@ddmichael运行brew install coreutils并使用/usr/local/bin/gshuf

2
@ddmichael或者,对于OS X,您可以使用此Perl衬垫。得到了这个旧博客之一。做了一个快速测试,发现工作正常。 cat myfile | perl -MList::Util=shuffle -e 'print shuffle(<STDIN>);' 我注意到它运行的速度有多快
Suraj Biyani 2014年

4

Python一线式:

python -c 'import sys, random; L = sys.stdin.readlines(); random.shuffle(L); print "".join(L),'

从标准输入中读取所有行,将它们随机洗净,然后在不添加末尾换行符的情况下打印它们(请注意,从末尾开始)。


2

对于OSX,二进制文件称为gshuf

brew install coreutils
gshuf -o File.txt < File.txt

1

如果像我一样,您是来这里寻找shufmacOS 的替代版本,然后使用randomize-lines

安装randomize-lines(自制)软件包,该软件包rl具有与相似的功能的命令shuf

brew install randomize-lines

Usage: rl [OPTION]... [FILE]...
Randomize the lines of a file (or stdin).

  -c, --count=N  select N lines from the file
  -r, --reselect lines may be selected multiple times
  -o, --output=FILE
                 send output to file
  -d, --delimiter=DELIM
                 specify line delimiter (one character)
  -0, --null     set line delimiter to null character
                 (useful with find -print0)
  -n, --line-number
                 print line number with output lines
  -q, --quiet, --silent
                 do not output any errors or warnings
  -h, --help     display this help and exit
  -V, --version  output version information and exit

0

我忘记了在哪里找到的,但这shuffle.pl是我使用的:

#!/usr/bin/perl -w

# @(#) randomize Effectively _unsort_ a text file into random order.
# 96.02.26 / drl.
# Based on Programming Perl, p 245, "Selecting random element ..."

# Set the random seed, PP, p 188
srand(time|$$);

# Suck in everything in the file.
@a = <>;

# Get random lines, write 'em out, mark 'em done.
while ( @a ) {
        $choice = splice(@a, rand @a, 1);
        print $choice;
}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.