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