Несколько советов по поводу awk:
Формат программы awk:
expression { action; ... }
expression { action; ... }
...
Если выражение имеет значение true, тогда выполняется блок действия. Некоторые примеры выражений:
BEGIN # true before any lines of input are read
END # true after the last line of input has been read
/pattern/ # true if the current line matches the pattern
NR < 10 # true if the current line number is less than 10
и т.д.. Выражение можно опустить, если вы хотите, чтобы действие выполнялось в каждой строке.
Итак, ваш блок BEGIN имеет слишком много скобок:
BEGIN {
"date" | getline d
printf("\t %s\n\n",d)
print "Heading"
print "====================="
}
Вы также можете написать
BEGIN {
system("date")
print ""
print "Heading"
print "====================="
}
или выполните команду date вне awk и передайте результат как переменную awk
awk -v d="$(date)" '
BEGIN {
printf("%s\n\n%s\n%s\n",
d,
"heading",
"======")
}
Команда печати неявно добавляет новую строку к выводу, поэтому print "foo\n"; print "bar"
напечатает пустую строку после "foo". Команда printf требует добавления новых строк в строку формата.
Не могу больше помочь с «кодом для печати каждого поля». Луук показывает, что print $0
напечатает все поля. Если это не соответствует вашим требованиям, вам нужно быть более конкретным.