Цикл for
или while
на самом деле не нужен. Любая из этих awk
команд будет работать:
awk 'BEGIN {print "title"}
{print "total",$1","$2}
END {print "end"}' list
или:
awk 'BEGIN {print "title"}
{printf "total %s,%s\n", $1, $2}
END {print "end"}' list
BEGIN{print "title"}
печатает слово title
один раз перед чтением данных в файле.
{print "total",$1","$2}
печатает слово total
, за которым следует запятая без кавычек, представляющая пробел между значениями в столбцах столбцов, а затем сами столбцы. Этот блок выполняется для каждой входной строки.
END{print "end"}
печатает слово end
и КОНЕЦ файла. END говорит ему выполнить блок, когда окончательный ввод из файла будет прочитан.
Для второй команды:
Единственная разница:
{printf "total %s,%s\n", $1, $2}
Здесь используется printf
вместо print
, где первый аргумент определяет формат.
%s,%s
говорит ему напечатать значения $1
и $2
, разделенные запятой, а \n
представляет новую строку, так что он переходит к следующей строке и печатает значения $1
и $2
до конца файла.
Лично я бы использовал вторую команду с printf
, так как вы можете просто использовать один набор кавычек вместо того, чтобы заключать в кавычки total
и запятую. Кроме того, он более модульный, как вы обнаружите, прочитав его справочную страницу. Я включаю только две команды, чтобы показать два разных способа.
Выход
title
total AAA,111
total BBB,222
total CCC,333
end