![필드 수를 계산하려면 AWK만 사용하고 uniq와 같은 다른 명령은 사용하지 마십시오.](https://linux55.com/image/187244/%ED%95%84%EB%93%9C%20%EC%88%98%EB%A5%BC%20%EA%B3%84%EC%82%B0%ED%95%98%EB%A0%A4%EB%A9%B4%20AWK%EB%A7%8C%20%EC%82%AC%EC%9A%A9%ED%95%98%EA%B3%A0%20uniq%EC%99%80%20%EA%B0%99%EC%9D%80%20%EB%8B%A4%EB%A5%B8%20%EB%AA%85%EB%A0%B9%EC%9D%80%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%A7%80%20%EB%A7%88%EC%8B%AD%EC%8B%9C%EC%98%A4..png)
샘플 파일
wolf@linux:~$ awk // file.txt
a b
b c
c d
wolf@linux:~$
이 예에는 2개의 필드와 3개의 레코드가 있습니다.
wolf@linux:~$ awk '{print NF}' file.txt
2
2
2
wolf@linux:~$
고유 번호를 얻으려면 uniq
명령을 사용하십시오.
wolf@linux:~$ awk '{print NF}' file.txt | uniq
2
wolf@linux:~$
이 예에서 단독으로 사용하여 필드 수를 계산할 수 있습니까 awk
?uniq
원하는 출력
wolf@linux:~$ awk <???> file.txt
2
wolf@linux:~$
답변1
원하는 것이 무엇인지 약간 불분명합니다( uniq
삭제만 수행되므로가까운중복) 그러나 레코드의 모든 고유 필드 수를 인쇄한다고 가정해 보겠습니다.인접 여부에 관계없이당신은 그것을 사용할 수 있습니다
awk '!seen[NF]++ {print NF}' file.txt
답변2
BEGIN 규칙은 첫 번째 입력 레코드를 읽기 전에 한 번만 실행됩니다.
마찬가지로 END 규칙은 모든 입력을 읽은 후 한 번만 실행됩니다.
https://www.gnu.org/software/gawk/manual/html_node/Using-BEGIN_002fEND.html
예를 들어 1
$ awk 'END {print NF}' file.txt
2
실시예 2
$ awk 'END {print NF " NF"}' file.txt
2 NF
실시예 3
$ awk 'END {print NF,NR}' file.txt
2 3
예를 들어 4
$ awk 'END {print NF " NF, " NR " NR"}' file.txt
2 NF, 3 NR