Я пытаюсь добавить первую строку текста (дата) в начало каждой строки в остальной части текстового файла. Кто-нибудь может помочь? Я использую bash для извлечения данных в отображаемый текстовый файл. (совершенно новое в этом)
Текстовый файл, как обсуждалось выше
Текущий текстовый файл:
Sun Apr 7 14:16:30
Host: 192.168.1.3; Status: Up
Host: 192.168.1.5; Status: Up
Host: 192.168.1.6; Status: Up
Я хочу, чтобы текстовый файл читался:
Date (from first line); Host: 192.168.1.3; Status: Up
Date (from first line); Host: 192.168.1.5; Status: Up
Date (from first line); Host: 192.168.1.6; Status: Up
Пожалуйста, добавьте образец ввода и желаемый результат для этого образца ввода к вашему вопросу.
Этот вопрос все еще требует дополнительной информации? Извините, это мой первый раз...
Единственное, чего еще не хватает, чтобы сделать этот вопрос хорошим для этого форума, - это вашей попытки решить его самостоятельно, независимо от того, насколько далеки они от истины, по вашему мнению.
awk -v OFS='; ' 'NR==1{d=$0;next}{print d,$0}' file
Вы также можете определить OFS='; '
, а затем print d, $0
— так будет легче читать.
или проще читать: awk '{if (NR==1) {date=$0} else {print date "; " $0}}' file
@Cyrus, это даже не похоже на awk
@oguzismail: Да, это слишком просто ;)
@Cyrus, в любом случае, пусть ваш комментарий останется там, может быть, это поможет оп лучше понять, если он не знаком с awk
Ниже awk
поможет:
awk 'NR==1{Date = "Date" FS $0 ";" FS}NR!=1{print Date $0}' file
Пример вывода
Date Sun Apr 7 14:16:30; Host: 192.168.1.3; Status: Up
Date Sun Apr 7 14:16:30; Host: 192.168.1.5; Status: Up
Date Sun Apr 7 14:16:30; Host: 192.168.1.6; Status: Up
Это может сработать для вас (GNU sed):
sed '1h;1d;G;s/\(.*\)\n\(.*\)/Date \2; \1/' file
Сделайте копию первой строки.
Удалите первую строку.
Добавить первую строку к текущей строке.
Переставьте первую строку так, чтобы она располагалась перед текущей строкой и перед ней стоял литерал Date
, а за ним ;
попробовал на gnu awk, из уважения к 1-й строке #
awk 'NR==1{a=$0;next}{print "Date "a,$0}' d
уважения к образцу
awk '$0~/\s*(Sun|Mon|Tue|Wed|Thu|Fri|Sat)/{a=$0;next}{print "Date "a,$0}' d
Пожалуйста, поместите образец в вопрос. Также вы должны показать свою попытку в виде кода здесь.