Я действительно не знаю, с чего начать с этим кодом.
У меня есть текстовый файл, в каждой строке 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. Или есть какой-то другой способ сделать то, что я хочу сделать?
Через paste
,
$ paste -d' ' - - - - < file
user1 user2 user3 user4
user5 user6 user7 user8
В 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;
В 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 = []
Странно, что команда вставки 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» и т. Д.