파일 이름과 결과를 어떻게 인쇄할 수 있습니까 1/2*(a+b)
? a
두 번째 줄의 첫 번째 필드는 어디에 있고 b
마지막 줄의 첫 번째 필드는 어디에 있습니까? 값을 변수에 상수로 저장하는 방법을 모르겠습니다. 매우 감사합니다
awk -v a=$(NR==2{print $1}) b=$(END(print $1)) '{print FILENAME, 1/2*(a+b)}' rv*.out
파일 1
4 5 6
14545.5886 2 6
2 3 5
45457.5462 8 6
파일 2
1 2
34441.4545 8
6 8
8 8
54447.4545 1
산출:
for file in test1.txt test2.txt; do
awk ' (NR==2){a=$1} END{print FILENAME, 1/2*(a+$1)}' "$file" >> stredni.txt;
done
test1.txt 7272.79
test2.txt 17220.7
원하는 결과:
test1 30001.5674
test2 44444.4545
답변1
구문 var=$(something)
은 셸 구문( 아님 awk
)이며, 이는 "명령을 실행 something
하고 결과를 셸 변수에 저장 $var
"을 의미합니다. etc는 awk 문이기 awk
때문에 어떻게든 스크립트 에 연결될 것으로 예상하는 것 같습니다 . NR==2
그건 작동하지 않습니다.
이 명령은 예상한 출력을 인쇄합니다.
$ for file in file1 file2; do
awk ' (NR==2){a=$1} END{print FILENAME, 1/2*(a+$1)}' "$file";
done
file1 30001.6
file2 44444.5
awk
GNU ( )를 사용하여 gawk
이 작업을 수행 할 수도 있습니다 .
$ gawk 'FNR==2{a=$1}ENDFILE{print FILENAME, 1/2*(a+$1)}' file1 file2
file1 30001.6
file2 44444.5
답변2
for i in "p.txt" "l.txt"; do co=`wc -l $i| awk '{print $1}'`; awk -v co="$co" 'NR==2{a=$1}NR==co{b=$1}END{print FILENAME,1/2*(a+b)}' $i; done
산출
p.txt 30001.6
l.txt 44444.5