У меня есть output.txt от запуска сценария оболочки следующим образом:
abc.txt
errorstatus1
Fri Nov 11 02:00:09 2016
def.txt
errorstatus2.txt
Sat Nov 12 03:00:09 2016
Текстовый файл построчно содержит несколько записей одинаковым образом. Я хочу напечатать эти значения в столбцы: имя файла, статус и метка времени следующим образом:
Filename Status Timestamp
abc.txt errorstatus1 Fri Nov 11 02:00:09 2016
def.txt errorstatus2 Sat Nov 12 03:00:09 2016
command-line
bash
scripts
text-processing
linux09
источник
источник
abc.txt,errorstatus1,Fri Nov 11 02:00:09 2016
. Я отредактировал ваш вопрос так, чтобы он соответствовал приведенному вами примеру. Не стесняйтесь откатываться, но учтите, что вам действительно нужно уточнить, что именно вы хотите - столбчатые значения или значения через запятуюОтветы:
С
paste
:это выведет содержимое файла, разделенное символом новой строки, в виде столбцов, и три столбца, разделенных табуляцией, на строку.
Добавление заголовка:
Чтобы упорядочить вывод, воспользуйтесь помощью
column
:Пример:
источник
echo Filename,Status,Timestamp; paste -d ',' - - - <file.txt
Вы можете использовать awk:
Вывод может быть не таким красивым:
Вы можете использовать
%s\t
вместо этого для вывода с разделителями табуляции.NR % 3
равно нулю (и ложно) для каждой третьей строки, поэтому другие строки печатаются с пробелом после них вместо новой строки.next
просто начинает следующую итерацию.1
, с новой строкой после нее, поскольку она не соответствует первому блоку.источник
Там также
rs
(BSD R E сек Hape полезность):Особенно,
Так
или (добавить заголовок)
источник
Для полноты вы можете сделать это
sed
тоже:1iFilename\tStatus\tTimestamp
вставляет строку заголовка перед строкой 1N;N
читает еще две строки в шаблонный буфер, давая в итоге 3 строки, разделенные новой строкойy/\n/\t/
заменяет все символы новой строки на вкладки в буфере шаблоновВ
i
,N
иy
SED команды описаны здесь .источник
Всегда есть возможность приготовить что-то для обработки текста с помощью AWK или Perl, и, конечно, Python, что и дает этот ответ.
Как однострочник:
Как многострочный скрипт
Основная идея здесь состоит в том, чтобы вводить сценарий через stdin (используя перенаправление оболочки
<
, хотя также можно использовать канал). Скрипт использует вкладки для разделения полей, хотя пробелы можно использовать и для более «тонко настроенного» вывода.Пример вывода с использованием примера ввода, предоставленного OP:
источник