답변:
cut -d, -f3 | tr -d '\n' | wc -m
( wc -c
문자가 아닌 바이트 수를 기억하십시오 :
$ echo a,1,españa,2 | cut -d, -f3 | tr -d '\n' | wc -c
7
$ echo a,1,españa,2 | cut -d, -f3 | tr -d '\n' | wc -m
6
)
wc
해석했기 wc
때문에이 맥락에서 사용하는 방법을 보여줍니다 .
awk -F, '{sum+=length($3)}; END {print +sum}' file
awk
열 기반 파일을 한 줄씩 처리하도록 설계되었습니다. 문제는 공구에 완벽하게 적합합니다.
0
입력 파일이 비어있을 때 빈 줄 대신 인쇄 됩니다.
awk
는 전형적인 Unix 정신으로 사례에 협력하는 3 개의 기본 유틸리티 (각각 크기의 일부 임)를 가지고 작업을 수행 할 수 있습니다 . cut + tr + wc가 5보다 빠르다는 것을 알 수 있습니다. awk보다 5 배 빠릅니다 perl
. (적어도 내 시스템에서는 UTF8 로캘로 100MB 파일에서 시도했습니다).
perl
솔루션 :
perl -Mopen=:locale -F, -anle '$sum += length($F[2]); END{print $sum}' file
또는 더 짧은 버전 :
perl -Mopen=:locale -F, -anle '$sum += length($F[2])}{print $sum' file
-Mopen=:locale
에 대한 perl
문자가 무엇인지 사용자 / 시스템의 정의를 사용하는 것이 그렇지 않으면 문자가 바이트 가정합니다. a,1,españa,2
UTF-8 로켈에서 입력을 시도하십시오 (대부분의 시스템에서 기본값).
샘플 파일을 다음과 같이 사용하십시오.
$ cat sample.txt
abd,123,egypt,78
cde,456,england,45
$ awk -F, '{print $3}' sample.txt | while read i; do echo "$i" | \
tr -d '\n' | wc -m; done
5
7
wc
각 줄의 수를 알아내는 작업은 까다로울 수 있습니다. 3 열의 각 문자열에 대해 개별적으로 호출해야하므로 원하는 것을하기가 약간 까다로워집니다. CSV의 각 행을 살펴보고 열 3을 추출한 다음 제시 wc
하여 문자 수를 가져와야합니다.
사용 sed
하여awk
sed 's/.*,.*,\(.*\),.*/\1/g' file | awk -v FS="" '{print NF;}'
예:
$ (echo abd,123,egypt,78; echo cde,456,england,45;) | sed 's/.*,.*,\(.*\),.*/\1/g' | awk -v FS="" '{print NF;}'
5
7
두 개의 awk
awk -F, '{print $3}' file | awk -v FS="" '{print NF;}'
예:
$ (echo abd,123,egypt,78; echo cde,456,england,45;) | awk -F, '{print $3}'| awk -v FS="" '{print NF;}'
5
7
wc
명령을 사용 하여 출력을 얻을 수 없습니다 !'라고 지정합니다.