awk без печати новой строки
Я хочу, чтобы переменная sum / NR печаталась бок о бок в каждой итерации. Как мы можем избежать awk от печати новой строки в каждой итерации ? В моем коде новая строка печатается по умолчанию в каждой итерации
for file in cg_c ep_c is_c tau xhpl
printf "n $file" >> to-plot.xls
for f in 2.54 1.60 800
awk '{sum+=}; END {print sum/NR}' ${file}_${f}_v1.xls >> to-plot-p.xls
done
done
Я хочу, чтобы выход выглядел так
cg_c ans1 ans2 ans3
ep_c ans1 ans2 ans3
is_c ans1 ans2 ans3
tau ans1 ans2 ans3
xhpl ans1 ans2 ans3
мой текущий выход такой
**cg_c**
ans1
ans2
ans3
**ep_c**
ans1
ans2
ans3
**is_c**
ans1
ans2
ans3
**tau**
ans1
ans2
ans3
**xhpl**
ans1
ans2
ans3
5 ответов:
awk '{sum+=}; END {printf "%f",sum/NR}' ${file}_${f}_v1.xls >> to-plot-p.xls
printf
вместо.
переменная ORS (output record separator) в AWK по умолчанию имеет значение "\n" и печатается после каждой строки. Вы можете изменить его на "" в
BEGIN
раздел, если вы хотите, чтобы все печаталось последовательно.
я думаю, что многие люди входят в этот вопрос, ища способ избежать новой строки в
awk
. Таким образом, я собираюсь предложить решение именно этого, так как ответ на конкретный контекст уже был решен!на
awk
,ORS
после печати.ORS
означает "выходной разделитель записей" и по умолчанию для новой строки. Поэтому всякий раз, когда вы говоритеprint "hi"
awk печатает "привет" + новая строка.это может быть изменено двумя разными способами: с помощью пустого
ORS
или черезprintf
.пустой
ORS
awk -v ORS= '1' <<< "hello man"
это возвращает "helloman", все вместе.
проблема здесь заключается в том, что не все неловко принимать параметр пустой
ORS
, так что вам, вероятно, придется установить другой разделитель записей.awk -v ORS="-" '{print ...}' file
например:
awk -v ORS="-" '1' <<< "hello man"
возвращает "hello-man -".
используя
printf
(желательно)пока
ORS
после записиprintf
нет. Таким образом,printf "hello"
просто печатает "привет", больше ничего.$ awk 'BEGIN{print "hello"; print "bye"}' hello bye $ awk 'BEGIN{printf "hello"; printf "bye"}' hellobye
наконец, обратите внимание, что в целом это пропускает последнюю новую строку, так что приглашение оболочки будет в той же строке, что и последняя строка вывода. Чтобы очистить это, используйте
END {print ""}
так новая строка будет напечатана после всей обработки.$ seq 5 | awk '{printf "%s", }' 12345$ # ^ prompt here $ seq 5 | awk '{printf "%s", } END {print ""}' 12345