awk 또는 sed를 사용하여 파일의 특정 열(탭으로 구분)에 쉼표로 구분된 요소 수를 계산하는 방법은 무엇입니까?
예:
AC 1,23,5
DC 2,8,89
다음을 반환합니다:
AC 3
DC 3
답변1
$ awk -F '[\t,]' '{print $1, NF-1}' some_file
어디
-F
필드 구분 기호(탭 또는 쉼표)를 설정하세요.$1
첫 번째 필드 참조NF
레코드의 필드 수를 포함하는 내장 변수입니다.- awk 문은 각 레코드(즉, 각 행)에 대해 실행됩니다.
답변2
awk -v col=2 -F '\t' '{$col=gsub(",", "", $col)+1; print}'
col
는 분석의 컬럼 번호를 나타내는 파라미터로 -v
2로 지정됩니다.
-F '\t'
필드 구분 기호를 탭 1 로 설정합니다 .gsub
대체 횟수를 반환하므로 쉼표 수를 계산하는 데 사용됩니다. 결과는 분석 열에 할당되고 print
결과적으로 모든 열이 표시됩니다.
$ cat input
AC 1,23,5
DC 2,8,89
XX 3,4,5,6,7 YYY,ZZZ
$ awk --assign col=2 -F '\t' '{$col=gsub(",", "", $col)+1; print}' < input
AC 3
DC 3
XX 5 YYY,ZZZ
1일부 awk 구현은 구문 분석이 불가능할 수 있으며 \t
, 이 경우 Bash 특정 기능을 사용할 수 있습니다.인용하다- $'\t'
- 탭 문자 자체를 awk에 전달합니다.