awk에 변수를 저장하는 방법은 무엇입니까?

awk에 변수를 저장하는 방법은 무엇입니까?

파일 이름과 결과를 어떻게 인쇄할 수 있습니까 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

awkGNU ( )를 사용하여 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

관련 정보