我真的不知道从这个代码开始。
我有一个文本文件,每行有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。或者还有其他方法可以做我想做的事情吗?
答案 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;等。