Из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.
Следующая 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 /
/