awk вопрос -как печатать дополнительные строки только для уникальных дат

Изhttps://www.gnu.org/software/grep/manual/html_node/Usage.html

Why does grep report “Binary file matches”?

If grep listed all matching “lines” from a binary file, it would probably generate output > that is not useful, and it might even muck up your display. So GNU grep suppresses output > from files that appear to be binary files. To force GNU grep to output lines even from files that appear to be binary, use the -a or ‘--binary-files=text’ option. To eliminate > the “Binary file matches” messages, use the -I or ‘--binary-files=without-match’ option.

3
07.12.2020, 14:11
1 ответ

Следующая awkпрограмма должна помочь:

awk '$1!=lastdate {printf "DATES\n%s %s %s /\n/\n",$2,$3,$4; lastdate=$1}
     {print "WCONPROD"; for (i=5;i<=NF;i++) printf "%s%s",$i,OFS; print "/\n/"}' input.txt

Это сравнит значение первого столбца с содержимым переменной lastdateи, если они различаются, напечатает указанный раздел «заголовок». Он также обновит lastdateдо новой -найденной даты в строке.

Для всех строк будет напечатана строка WCONPROD, затем поля с 5 по (, сколько у вас есть ), разделенные «разделителем полей вывода» (по умолчанию — один пробел, измените с помощью -v OFS='whatever'команда -строковый аргумент в соответствии с вашими потребностями ), за которым следует шаблон / <newline> /.

Вывод для вашего примера:

DATES
16 Oct 2007 /
/
WCONPROD
A X1 X2 X3 X4 X5 /
/
DATES
17 Oct 2007 /
/
WCONPROD
A X1 X2 X3 X4 X5 /
/
WCONPROD
B X1 X2 X3 X4 X5 /
/
DATES
18 Oct 2007 /
/
WCONPROD
C X1 X2 X3 X4 X5 /
/
3
18.03.2021, 22:44

Теги

Похожие вопросы