1. 程式人生 > >shell指令碼統計檔案中單詞的個數

shell指令碼統計檔案中單詞的個數

一、方案  http://www.cnblogs.com/youxuguang/p/5917215.html

方法一:

(1)cat file|sed 's/[,.:;/!?]/ /g'|awk '{for(i=1;i<=NF;i++)array[$i]++;}END{for(i in array) print i,array[i]}'   #其中file為要操作的檔案,sed中/ /間有一個空格。

(2)sed 's/[,.:;/!?]/ /g' file|awk '{for(i=1;i<=NF;i++)array[$i]++;}END{for(i in array) print i,array[i]}'     #(1)和(2)效果一致。

方法二:

(1)awk 'BEGIN{RS="[,.:;/!?]"}{for(i=1;i<=NF;i++)array[$i]++;}END{for(i in array) print i,array[i]}' file

這裡 -F',' 表明每個詞用逗號分隔  https://zhidao.baidu.com/question/586302142.html
NF其實是number of field, 即整行(或者說record)裡面詞 (更準確的翻譯應該是域)的總數
NF-1 就是倒數第二個詞
sed ′s/\%//g‘
s表示替換,\%就表示百分號,s/\%//將%替換為空,最後的g標誌表示全部替換

即刪除所有的百分號

{for(i=1;i<=NF;i++)a[$i]++;
NF表示單行(記錄 )中欄位 數,$i表示對應欄位 ,假設 文字是 "a b c d a b a" ,a出現3次所以a[a]++執行了3次,a[a]的值增加了3,這個迴圈完成 後a陣列 中為已經讀取的行相同內容欄位出現次數

for (i in a) 表示 依次迭代a陣列 的下標 ,賦值給變數 i,如上例a陣列的下標 會是a,b,c,d(順序是隨機的),這四個下標會被按隨機順序賦值給變數 i。
print i"="a[i],列印欄位 i和其出現次數a[i]
這樣寫每讀取一行都 會列印 一次已經 重複出現過的欄位 統計,為什不只列印 最終 統計呢,像下面這樣

awk '{for(i=1;i<=NF;i++)a[$i]++;}
END
{for(i in a)print i" = "a[i]}' tongji.txt

二、驗證

[[email protected] shell]# cat file
hello world,hi girl;how old are you?
where are you from?
how are you?
i am fine!thinks.
and you?
http://www.cnblogs.com/youxuguang/

[[email protected] shell]# cat file|sed 's/[,.:;/!?]/ /g'|awk '{for(i=1;i<=NF;i++)array[$i]++;}END{for(i in array) print i,array[i]}'
com 1
http 1
from 1
www 1
i 1
you 4
hi 1
hello 1
youxuguang 1
and 1
world 1
cnblogs 1
where 1
old 1
how 2
fine 1
am 1
are 3
girl 1
thinks 1

[[email protected] shell]# sed 's/[,.:;/!?]/ /g' file|awk '{for(i=1;i<=NF;i++)array[$i]++;}END{for(i in array) print i,array[i]}'
com 1
http 1
from 1
www 1
i 1
you 4
hi 1
hello 1
youxuguang 1
and 1
world 1
cnblogs 1
where 1
old 1
how 2
fine 1
am 1
are 3
girl 1
thinks 1

[[email protected] shell]# awk 'BEGIN{RS="[,.:;/!?]"}{for(i=1;i<=NF;i++)array[$i]++;}END{for(i in array) print i,array[i]}' file
com 1
http 1
from 1
www 1
i 1
you 4
hi 1
hello 1
youxuguang 1
and 1
world 1
cnblogs 1
where 1
old 1
how 2
fine 1
am 1
are 3
girl 1
thinks 1

相關推薦

shell指令碼統計檔案單詞個數

一、方案  http://www.cnblogs.com/youxuguang/p/5917215.html 方法一: (1)cat file|sed 's/[,.:;/!?]/ /g'|awk '{for(i=1;i<=NF;i++)array[$i]++;}END{for(i in array)

使用shell指令碼統計檔案ip出現的次數

首先準備檔案demo.txt,內容如下: 1 192.168.41.20 2 192.168.41.21 3 192.168.41.22 4 192.168.41.23 5 192.168.41.24 6 192.168.41.25 統

統計檔案單詞個數--c++實現

#include <iostream> #include <fstream> #include <cstdlib> #include <map> //用C++寫比較簡單,直接用map關聯容器就很好解決 int main(int

統計檔案單詞個數

include”stdafx.h” include include include define Inti_word 0 define In_word 1 define Out_word 2 define End_word 3 int Count_word(c

shell 指令碼替換檔案的某個字串

1、將當前目錄下包含"qwe"串的檔案中的"qwe"字串替換為"abc" sed -i “s/qwe/abc/g” grep "qwe" -rl ./ 2、將某個檔案中的"qwe"字串替換為"abc" sed -i “s/qwe/abc/g” test.txt 如果將某個檔案

Hadoop 統計檔案單詞出現的次數

pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://

統計檔案單詞出現的頻次

public class Util{     public static void main(String[] args) throws IOException {         //鍵盤錄入指定檔名         Scanner sc = new Scanner(Sys

Shell指令碼統計指定目錄下子目錄檔案個數

#!/bin/bash function usage(){     echo ""     echo "introduction: count of files subdir of source dir to save file.txt with [[subdir] [nu

使用shell指令碼統計原始碼檔案的註釋行數.(// , /**/)

今天看到一求助帖子再問這個事,所以無聊寫了個。 用的是awk指令碼 , 也就是指令碼直譯器是用/usr/bin/awk , 而不是/bin/sh 但都是指令碼 , 如果你想的話, 可以用shell指令碼呼叫我這個awk指令碼就行了。 使用方法:將下面的指令碼儲存成檔案如ge

演算法之“統計字串單詞個數

如,給定String,求此字串的單詞數量。字串不包括標點,大寫字母。例如String str="hello world hello hi";,單詞數量為3,分別是:hello world hello hi 。 public static void main(String[] args){

【OS大作業】用多執行緒統計txt檔案字元個數(Java實現)

問題描述 給定一個txt檔案,利用不同個數的執行緒查詢檔案中某字元的個數,探究執行緒個數與查詢時間的關係。 本作業程式碼使用JAVA實現,版本為10.0.2,使用的IDE為Eclipse4.9.0. 結果測試所用的txt檔案內容為英文,編碼格式為UTF-8。 原始碼 第一版程式碼:(

sort +awk+uniq 統計檔案出現次數最多的前10個單詞

原文地址:http://blog.sina.com.cn/s/blog_5dce657a01012ddi.html   作者:小新 例項cat logt.log|sort -s -t '-' -k1n |awk '{print $1;}'|uniq -c|sort -k1nr|head

Hadoop 統計檔案某個單詞出現的次數

轉自:https://www.xuebuyuan.com/1270346.html   2013年10月24日 ⁄ 綜合 ⁄ 共 2628字 ⁄ 字號 小 中 大 ⁄ 評論關閉   如檔案wor

shell指令碼 統計目錄下檔案數量

1、 統計當前資料夾下檔案的個數   ls -l |grep "^-"|wc -l 2、 統計當前資料夾下目錄的個數   ls -l |grep "^d"|wc -l 3、統計當前資料夾下檔案的個數,包括子資料夾裡的    ls -lR|grep "^-"|wc -

linux統計txt檔案單詞出現次數並排序

檔案:a.txt 任務:統計該檔案中每一個單詞出現的次數,並按照出現頻率從大到小排序 sed 's/ /\n/g' "a.txt" | sort | uniq -c | sort -nr 解析: sed替換 sed 's/被替換的字串/新字串/[替換選項]' fil

linuxsort(統計檔案出現次數最多的前10個單詞

例項 cat logt.log|sort -s -t '-' -k1n |awk '{print $1;}'|uniq -c|sort -k1nr|head -100 使用linux命令或者shell實現:檔案words存放英文單詞,格式為每行一個英文單詞

Linux系統執行.sh(Shell指令碼檔案

      其中,以絕對路徑執行方法:       (1)./home/test/shell/hello.sh,可以這樣執行是因為當前登入使用者是root,當前路徑是在/下,. 代表當前路徑。       (2)/home/test/shell/hello

shell 指令碼統計資料夾下所有檔案的字元數

最近寫了一些文章存放在一個資料夾下,今天想看看自己到底寫了多少內容。於是想寫一個指令碼來進行統計。最終程式碼如下: #!/bin/bash files=$(ls) all=0 for i in

用python統計檔案各個單詞出現的次數

import string d = {} def choice(str): s = str.lower() #全部轉化為小寫 for c in range(97,123): #ASC