변수 합계 / 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+=$3}; 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
답변
awk '{sum+=$3}; END {printf "%f",sum/NR}' ${file}_${f}_v1.xls >> to-plot-p.xls
print
기본적으로 개행을 삽입합니다. 당신은 그런 일을 원하지 않기 때문에 printf
대신 사용하십시오.
답변
AWK의 ORS (출력 레코드 구분 기호) 변수는 기본적으로 “\ n”이며 모든 줄 뒤에 인쇄됩니다. BEGIN
모든 내용을 연속적으로 인쇄 하려면 섹션 에서 “”로 변경할 수 있습니다 .
답변
많은 사람들이이 질문에 들어가서에서 새로운 줄을 피하는 방법을 찾고 있다고 생각 awk
합니다. 따라서 특정 컨텍스트에 대한 답변이 이미 해결되었으므로 이에 대한 해결책을 제공 할 것입니다!
에서 awk
, 인쇄 후를 print
자동으로 삽입합니다 ORS
. ORS
“출력 레코드 구분 기호”를 나타내며 기본값은 새 줄입니다. 그래서 당신이 말할 때마다print "hi"
awk가 “hi”+ 새 줄을 인쇄 .
이것은 두 가지 다른 방법으로 변경 될 수 있습니다 : 비어 ORS
있거나 사용printf
.
빈 사용 ORS
awk -v ORS= '1' <<< "hello
man"
“helloman”을 모두 반환합니다.
여기서 문제는 모든 awk가 empty 설정을 허용하지 않으므로 ORS
다른 레코드 구분 기호를 설정해야한다는 것입니다.
awk -v ORS="-" '{print ...}' file
예를 들면 다음과 같습니다.
awk -v ORS="-" '1' <<< "hello
man"
“hello-man-“을 반환합니다.
사용 printf
(권장)
하지만 print
첨부합니다 ORS
기록 후, printf
하지 않습니다. 따라서 printf "hello"
“hello”만 인쇄합니다.
$ awk 'BEGIN{print "hello"; print "bye"}'
hello
bye
$ awk 'BEGIN{printf "hello"; printf "bye"}'
hellobye
마지막으로, 이것은 마지막 새 줄을 놓치므로 쉘 프롬프트는 출력의 마지막 줄과 같은 줄에있게됩니다. 이를 청소하려면 END {print ""}
모든 처리 후에 새 줄이 인쇄되도록 사용 하십시오.
$ seq 5 | awk '{printf "%s", $0}'
12345$
# ^ prompt here
$ seq 5 | awk '{printf "%s", $0} END {print ""}'
12345
답변
일방 통행
awk '/^\*\*/{gsub("*","");printf "\n"$0" ";next}{printf $0" "}' to-plot.xls
답변
다음과 같이 ORS를 동적으로 간단하게 사용할 수 있습니다.
awk '{ORS="" ; print($1" "$2" "$3" "$4" "$5" "); ORS="\n"; print($6-=2*$6)}' file_in > file_out
답변
Perl이 옵션이라면, fedorqui의 예제를 사용하는 솔루션이 있습니다 :
seq 5 | perl -ne 'chomp; print "$_ "; END{print "\n"}'
설명 :
chomp
줄 바꾸기를 제거하여
print "$_ "
각 줄 을 인쇄
하고 END{}
블록이 줄 바꾸기를 인쇄하는 데 사용되는 공간을 추가합니다.
산출: 1 2 3 4 5
답변
