デモ

デモ

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およびwcHeirloom 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

おすすめ記事