명령을 사용하여 생성된 줄에는 echo {,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}
8191개의 단어 또는 114687개의 문자(106497개의 점과 8190개의 공백)가 포함됩니다.
| xargs -n 1
분할하는 데 계산 시간이 필요한 이유는 무엇입니까 ? 내 컴퓨터에서는 8초입니다.
배경 이야기.
bash 버팀대 확장을 가지고 놀다가 이상한 문제를 발견했습니다. 예제 질문에서 bash 중괄호 확장 타이밍을 확인하고 있습니다. 명시적인 루프와 변수를 피하면서 새 줄에 문자열의 최대 "n"(=13) 도트를 인쇄합니다. 나는 다소 느린 해결책을 생각해 냈습니다.
$ time echo {,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·} | xargs -n 1 | sort -u
·
··
···
····
·····
······
·······
········
·········
··········
···········
············
·············
real 0m8.800s
user 0m0.188s
sys 0m0.748s
나는 이것이 성능 때문에 발생한 것이라고 생각했기 sort
때문에 정렬하지 않고 솔루션을 확인했습니다.
$ time echo {,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·} | xargs -n 1 | awk '{if (!a[$0]) {print $0} ; a[$0]=$0}'
·
··
···
····
·····
······
·······
········
·········
··········
···········
············
·············
real 0m8.250s
user 0m0.152s
sys 0m0.784s
이건 좀 빠르네요. 확장 자체는 엄청나게 빠릅니다.
time echo {,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·} > /dev/null
real 0m0.024s
user 0m0.020s
sys 0m0.004s
콘솔에 포인트 벽을 인쇄할 때 0m0.250s이지만 해당 출력은 일반적으로 계산에 비해 느립니다. 그래서 구분선에 걸리는 시간을 확인했습니다.
time echo {,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·}{,·} | xargs -n 1 > /dev/null
real 0m8.551s
user 0m0.096s
sys 0m0.724s
xargs
그동안 무엇을 하고 있었나요?
답변1
/bin/echo
xargs는 8191번 실행되기 때문에 느립니다 .
대신 사용하십시오 | tr -s " " "\n"
.