簡體   English   中英

通過shell腳本計算文件中的字符數

[英]Counting number of characters in a file through shell script

我想檢查文件中的字符數從開始到EOF字符。 任何人都可以通過shell腳本告訴我如何做到這一點

這樣做:

wc -c filename

如果只想在輸出中重復沒有文件名的計數:

wc -c < filename

編輯:

使用-m來計算字符而不是字節(如Sébastien的答案所示)。

#!/bin/sh

wc -m $1 | awk '{print $1}'

wc -m計算字符數; awk命令只打印字符數,省略文件名。

wc -c會給你字節數(可以與字符數不同,因為根據編碼你可能有幾個字節編碼的字符)。

awk '{t+=length($0)}END{print t}' file3

要獲得字符串的確切字符數,請使用printf,而不是echo,cat或直接在文件上運行wc -c,因為使用echo,cat等將計算換行符,這將為您提供包括換行符。 因此,如果使用echo等,帶有文本'hello'的文件將打印6,但如果使用printf,它將返回精確的5,因為沒有要計算的換行元素。

如何使用printf計算字符串中的字符:

$printf '6chars' | wc -m
6

要將其轉換為腳本,您可以在文本文件上運行以計算字符數,將以下內容保存在名為print-character-amount.sh的文件中:

#!/bin/bash
characters=$(cat "$1")
printf "$characters" | wc -m

包含上述文本的文件print-character-amount.sh上的chmod + x,將文件放在PATH中(即/ usr / bin /或在.bashrc文件中作為PATH導出的任何目錄)然后在文本文件類型上運行腳本:

print-character-amount.sh file-to-count-characters-of.txt

只是awk

awk 'BEGIN{FS=""}{for(i=1;i<=NF;i++)c++}END{print "total chars:"c}' file

只有殼

var=$(<file)
echo ${#var}

紅寶石(1.9+)

ruby -0777 -ne 'print $_.size' file

測試以下腳本並准確給出預期的結果

\#!/bin/bash

echo "Enter the file name"

read file

echo "enter the word to be found"

read word

count=0

for i in \`cat $file`

do

if [ $i == $word ]

then

count=\`expr $count + 1`

fi

done

echo "The number of words are $count"

我原本以為使用stat來查找文件的大小會更好,因為文件系統已經知道它,而不是導致整個文件必須用awkwc讀取 - 特別是如果它是多個GB文件或可能不駐留在HSM上的文件系統中的文件。

stat -c%s file

是的,我承認它不考慮多字節字符,但會補充說OP從未澄清這是否是一個問題。

對user.py等人的信用。


echo "ää" > /tmp/your_file.txt
cat /tmp/your_file.txt | wc -m

結果3

在我的例子中,結果預計為2 (字母ä兩倍)。 但是,echo(或vi)會在輸出(或文件)的末尾添加換行符\\n 於是兩個ä和一個Linux的換行符\\n進行計數。 這三個在一起。

使用管道| 不是最短的變體,但所以我必須知道更少的wc參數。 另外,根據我的經驗, cat是防彈的。

在Ubuntu 18.04.1 LTS(Bionic Beaver)上測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM