wc를 사용하여 각 줄의 문자 수를 계산합니다.

wc를 사용하여 각 줄의 문자 수를 계산합니다.

wc를 사용하여 총 문자 수 대신 줄당 문자 수를 계산할 수 있습니까?

예를 들어

echo -e foo\\nbar\\nbazz | grep -i ba

반품:

bar
bazz

echo -e foo\\nbar\\nbazz | grep ba | wc -m 그렇다면 이 단어의 길이 목록을 반환해 보는 것은 어떨까요 ? (3과 4)

제안?

추신: 계산에 개행 문자가 사용되는 이유는 무엇입니까 wc -m? wc -l개행 수를 세는데 왜 wc -m개행 수를 계산해야 합니까?

답변1

wc전체 파일 수를 계산합니다. awk한 줄씩 처리할 수 있습니다(줄 구분 기호는 계산되지 않음).

echo -e "foo\nbar\nbazz\n" | grep ba | awk '{print length}'

또는 awk주로 다음의 상위 집합과 같습니다 grep.

echo -e "foo\nbar\nbazz\n" | awk '/ba/ {print length}'

(일부 awk구현에서는 문자 수(예 wc -c: )가 아닌 바이트 수(예: wc -m)를 보고하는 반면, 다른 구현에서는 유효한 문자의 일부를 형성하지 않는 문자 이외의 바이트를 계산합니다( wc -m대부분의 구현에서는 무시됩니다). ) ))

답변2

또 다른 접근 방식이 있습니다.

for line in $(echo -e foo\\nbar\\nbazz); do echo ${#line}; done

산출:

3
3
4

답변3

출력 라인을 반복하고 wc각각에 대해 실행할 수 있습니다.

echo -e foo\\nbar\\nbazz | \
grep -i ba | \
while read LINE; do echo $LINE | wc -m; done

줄 바꿈을 계산하지 않으려면 제거할 수 있습니다.

echo -e foo\\nbar\\nbazz | \
grep -i ba | \
while read LINE; do echo ${LINE::-1} | wc -m; done

(위에서는 다음 줄 뒤에 개행이 있다고 가정하므로 마지막 줄에 후행 개행이 포함되어 있지 않으면 카운트가 해제됩니다.)

관련 정보