OSXでは、次のコマンドを使用してファイルの行数を計算します。
nl=$(wc -l < ~/myfile.txt)
たとえば、結果は100です。今、私は結果を別のコマンドに使用したいのですが、nl
奇妙なことにnl
echo 1-$nl
1- 100
代わりに私にください1-100
。
デモ
cv me$ nl=$(wc -l < ~/Desktop/cap.xlsx)
cv me$ echo $nl
104
cv me$ echo 1-$nl
1- 104
なぜこれが起こるのですか?どうやって入手できますか1-100
?
ベストアンサー1
POSIXで定義されているように、出力にはwc
次の形式の各入力ファイルのエントリを含める必要があります。
"%d %d %d %s\n", <newlines>, <words>, <bytes>, <file>
ただし、出力ファイル形式のpseudo printf()
-stringはSystem Vのバージョンとは異なりますwc
。
"%7d%7d%7d %s\n"
POSIXは先行スペースを追加する必要がないため、必要に応じて自由に実行できます。wc
少なくともOSXおよびwc
Heirloom Toolboxには、出力に先行スペースを追加するさまざまな実装があります。
$ /usr/5bin/wc -l /tmp/file
3 /tmp/file
GNU wcは、オプションなしで標準入力から読み取るときに先行スペースを追加します。
$ cat file | wc
5 5 65
POSIX シェルから先行スペースをすべて削除するには、次の手順を実行します。
set -f
set -- $nl
nl=$1
set +f
このメソッドは、変数に先行または末尾の空白のみが含まれ、中間スペースは含まれていないと仮定します。ab。