2014-09-18 30 views
0

我真的不知道从哪里开始使用此代码。一个文本文件10000字每行一个如何将它们组合

我有一个文本文件,每行有1个字它的相当大的10000行。我想要的是将他们分成每行4个字。

因此,让我说我的文件看起来像这样。

user1 
user2 
user3 
user4 
user5 
user6 
user7 
user8 

等10万行

我想要做的就是让另一个文本文件与输出像

user1 user2 user3 user4 
user5 user6 user7 user8 

等等,所有这些行(这是每一个字线)

到目前为止,香港专业教育学院得到了提示,像这样做:

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

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

所以我想要解决这个问题是使用while循环或类似的。 我宁愿它在BASH中。或者有没有其他方法可以做我想做的事情?

+1

你怎么能不知道从哪里开始?你知道如何阅读一行吗?如何写一行?如何操作字符串?至少,选择一种语言。 – jonrsharpe 2014-09-18 16:32:30

+0

我不知道这样做的最佳方式。不,我不知道如何读写线条。这就是为什么我问,这是我如何学习和理解它是如何工作的。谢谢 – 2014-09-18 17:02:39

+0

也许你应该从那里开始 - 把你的程序分成几步,研究如何采取每一步。 – jonrsharpe 2014-09-18 17:05:20

回答

3

通过paste

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

,它将每行只列出一行。 – 2014-09-18 16:31:41

+1

@ZaraRebeckaElisabethZentio这在这里工作。你试过了吗? – 2014-09-18 16:33:33

+0

我在Ubuntu上测试过,当我做粘贴时,它只是一一列出它们。-d - ' - - - - 2014-09-18 17:00:32

0

在PHP中您可以使用modulus(%) operatornth元素进行一些东西。在这种情况下,我们需要一个基于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; 
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 = [] 
0

Avinash Raj的粘贴命令不适用于您,这很奇怪。

试试这个awk命令:

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

其中infile是输入文件& outfile的名字就是你的输出文件的名称。


如果你想打印的数据整齐的列,你可以这样做

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

这将使列8个字符宽,再加上每列之间1个空间。如果任何单词长度超过8个字符,它将不会被截断,它只会将列对齐排列在该行上。

如果你想要的列是左对齐,更改格式字符串为“%-8S%C”等

相关问题