一个文本文件10000行每行一个如何对它们进行分组

时间:2014-09-18 16:22:38

标签: php python bash

我真的不知道从这个代码开始。

我有一个文本文件,每行有1个单词,其中有相当大的10 000行。我想要的是每行分组4个单词。

所以我要说我的文件看起来像这样。

user1
user2
user3
user4
user5
user6
user7
user8

等10 000行

我想要做的是使用输出

创建另一个文本文件
user1 user2 user3 user4
user5 user6 user7 user8
所有这些行的

等等(每行一个字)

到目前为止,我已经有了这样做的提示:

paste -d " "  - - - - < filename.txt

但这不起作用我不知道是否存在限制,当我在一个只有10行单词的文件上尝试时,它可以正常工作。但是在我的大文件中它不起作用。

所以我想解决的问题是使用while循环或类似方法。 我更喜欢它在BASH。或者还有其他方法可以做我想做的事情吗?

4 个答案:

答案 0 :(得分:3)

通过paste

$ paste -d' '  - - - - < file
user1 user2 user3 user4
user5 user6 user7 user8

答案 1 :(得分:0)

在PHP中,您可以使用modulus(%) operator在每个nth元素上执行某些操作。在这种情况下,我们需要基于1的索引,而不是基于0的索引。

// fake array
$days = array('day1', 'day2', 'day3', 'day4', 'day5', 'day6', 'day7', 'day8');


foreach($days as $idx => $day):
    $idx++; // required because our array is 0 based
    if(($idx % 4) == 1):
        echo '<br/>'. $day;
    else:
        echo $day;
    endif;
endforeach;

答案 2 :(得分:0)

在python中,您可以枚举文件,它将为您提供行号和行的值。将行的值附加到列表中,当您处于4的倍数时,请写入行。

with open('users.txt', 'rb') as infile, with open('output.txt', 'wb') as outfile:
    output = []
    for i, line in enumerate(data):
        output.append(line)
        if (i + 1) % 4 == 0:
            outline = " ".join(output)
            outfile.write(outline)
            outfile.write(os.linesep)
            output = []

答案 3 :(得分:0)

Avinash Raj的粘贴命令对你不起作用,这很奇怪。

试试这个awk命令:

awk '{printf "%s%c", $0, (NR % 4)?" ":"\n"}; END{print ""}' infile >outfile

其中infile是输入文件的名称&amp; outfile是输出文件的名称。


如果您希望数据以整齐的列打印,您可以执行类似

的操作

awk '{printf "%8s%c", $0, (NR % 4)?" ":"\n"}; END{print ""}' infile >outfile

这将使列8字符宽,每列之间加1个空格。如果任何单词超过8个字符,它就不会被砍掉,它只会将列对齐方式抛出该行。

如果您希望列齐左,请将格式字符串更改为&#34;% - 8s%c&#34;等。