コマンドを使用して生成された行には、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"
。