web-dev-qa-db-ja.com

bashのwcから整数を取得する

Wcがbashで返す整数を取得する方法はありますか?

基本的に、ファイル名の後に画面に行番号とワード数を書きたいと思います。

output: filename linecount wordcountここに私がこれまでに持っているものがあります:

files=`ls`
for f in $files;
do
        if [ ! -d $f ] #only print out information about files !directories
        then
                # some way of getting the wc integers into Shell variables and then printing them
                echo "$f $lines $ words"
        fi
done
104
Jordan

cut コマンドを使用して、wcの出力の最初のワード(行またはワード数)を取得できます。

lines=`wc -l $f | cut -f1 -d' '`
words=`wc -w $f | cut -f1 -d' '`
50
casablanca

これまでで最も簡単な答え:

wc < filename 
83
BananaNeil

ただ:

wc -l < file_name

仕事をします。ただし、この出力には、wcが数値を右揃えするため、接頭辞付きの空白が含まれます。

75
sten
wc $file | awk {'print "$4" "$2" "$1"'}

必要に応じてレイアウトを調整します。

ネガティブ(「ディレクトリではない」)よりもポジティブロジック(「is a file」)を使用する方が良い

[ -f $file ] && wc $file | awk {'print "$4" "$2" "$1"'}
55
James Broadhead

時々、wcは異なるプラットフォームで異なる形式で出力します。例えば:

OS Xの場合:

$ echo aa | wc -l

         1

In Centos:

$ echo aa | wc -l

1

したがって、カットのみを使用すると、番号が取得されない場合があります。代わりに、trを試してスペース文字を削除します。

$ echo aa | wc -l | tr -d ' '
33
Tahsin Turkoz

受け入れられた/人気のある回答はnot OSXで動作します。

次のいずれかは、bsdおよびlinuxで移植可能です。

wc -l < "$f" | tr -d ' '

OR

wc -l "$f" | tr -s ' ' | cut -d ' ' -f 2

OR

wc -l "$f" | awk '{print $1}'
20
rouble

ファイル名をwcにリダイレクトすると、出力のファイル名が省略されます。

バッシュ:

read lines words characters <<< $(wc < filename)

または

read lines words characters <<EOF
$(wc < filename)
EOF

forを使用してlsの出力を反復処理する代わりに、次のようにします。

for f in *

スペースを含むファイル名がある場合に機能します。

グロビングを使用できない場合は、while readループにパイプする必要があります。

find ... | while read -r f

またはプロセス置換を使用

while read -r f
do
    something
done < <(find ...)
10

ファイルが小さい場合は、wcを2回呼び出す余裕があり、次のようなものを使用できます。これにより、余分なプロセスへのパイプが回避されます。

_lines=$((`wc -l "$f"`))
words=$((`wc -w "$f"`))
_

$((...))は、bashの 算術展開 です。この場合、wcの出力から空白を削除します。

either the linecount or wordcountが必要な場合、このソリューションはより意味があります。

3
Walter Tross

sedはどうですか?

wc -l /path/to/file.ext | sed 's/ *\([0-9]* \).*/\1/'
2
mgold

数値結果のためにこれを試してください:
nlines = $(wc -l <​​$ myfile)

1
paulonki
files=`ls`
echo "$files" | wc -l | Perl -pe "s#^\s+##"
0
Pedro Reis

「基本的に、ファイル名の後に画面に行番号とワード数を書きたい」

answer=(`wc $f`)
echo -e"${answer[3]}
lines:  ${answer[0]}
words:  ${answer[1]}
bytes:  ${answer[2]}"

出力:myfile.txt行:10ワード:20バイト:120

0
user8155253
typeset -i a=$(wc -l fileName.dat  | xargs echo | cut -d' ' -f1)
0
GeorgesMakarios

これを試して:

wc `ls` | awk '{ LINE += $1; WC += $2 } END { print "lines: " LINE  " words: " WC }'

行カウントとワードカウント(LINEおよびWC)を作成し、wcから抽出した値でそれらを増やし(最初の列の値に$ 1、2番目の列に$ 2を使用)、最終的に結果を出力します。

0
Aif