Один текстовый файл 10000 слов по одному в строке, как их сгруппировать

Я действительно не знаю, с чего начать с этим кодом.

У меня есть текстовый файл, в каждой строке 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

Решение

Через paste,

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

Другие решения

В 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;
0

В Python вы можете перечислить файл, который даст вам номер строки и значение строки. Добавьте значения строки в список, и, когда вы кратны четырем, напишите строку.

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» и т. Д.

0
По вопросам рекламы [email protected]