ubuntu 操作補充 查詢檔案 和 awk

2021-07-06 03:08:21 字數 4006 閱讀 6572

1.whereis 檔名

特點:快速,但是是模糊查詢,例如 找 #whereis mysql 它會把mysql,mysql.ini,mysql.*所在的目錄都找出來.我一般的查詢都用這條命令.

2.find / -name 檔名

特點:準確,但速度慢,消耗資源大,例如我想找到php.ini的準確位置,就需要用

#find / -name php.ini

3.locate 檔名

強力推薦的方法,最快,最好的方法.

注意:第一次使用該命令,可能需要更新資料庫,按照提示的命令執行一下就好了.

先試試在命令列這麼做:echo `cat list`

然後仔細看看指令碼裡面 `echo $line` 的結果

cat會輸出檔案原本的樣子。

是echo自動會把tab轉換為空格,echo "$line"這種寫法就避免了這種情況

uniq 命令

-c 在輸出行前面加上每行在輸入檔案中出現的次數。

-d 僅顯示重複行。

-u 僅顯示不重複的行。

linux系統中的wc(word count)命令的功能為統計指定檔案中的位元組數、字數、行數,並將統計結果顯示輸出。

1.命令格式:

wc [選項]檔案...

2.命令功能:

統計指定檔案中的位元組數、字數、行數,並將統計結果顯示輸出。該命令統計指定檔案中的位元組數、字數、行數。如果沒有給出檔名,則從標準輸入讀取。wc同時也給出所指定檔案的**計數。

3.命令引數:

-c 統計位元組數。

-l 統計行數。

-m 統計字元數。這個標誌不能與 -c 標誌一起使用。

-w 統計字數。乙個字被定義為由空白、跳格或換行字元分隔的字串。

-l 列印最長行的長度。

-help 顯示幫助資訊

--version 顯示版本資訊

計算器命令 :bc 

通過管道命令送入這個計算器程式就好了

或者echo$(expr  ***xx)

linux中常常會使用到cut命令來分割字串,下面說明下cut命令引數的使用:

-d  指定分隔符,如:按照「:」分割,-d:

-c  提取第n個位元組,如:-c5,表示提取每行的第5個位元組,-c5-14,表示提取每行的第5-14個位元組,-c1,5,14,表示提取第1、5、14個位元組。

-f  指定輸出的域

例項:cut  –d:  -f1,2   //按照」:」來分割,並輸出第1和2段

[root@centos ~]# cat test.txt

1:2:3

a:b:c

[root@centos ~]# cut -d: -f1,2 test.txt

1:2a:b

cat logt.log|sort -s -t '-' -k1n |awk ''|uniq -c|sort -k1 -nr|head -100

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

使用linux命令或者shell實現:檔案words存放英文單詞,格式為每行乙個英文單詞(單詞可以重複),統計這個檔案中出現次數最多的前10個單詞。

cat words.txt | sort | uniq -c | sort -k1 -nr | head -10

主要考察對sort、uniq命令的使用,相關解釋如下,命令及引數的詳細說明請自行通過man檢視,簡單介紹下以上指令各部分的功能:

sort:  對單詞進行排序

uniq -c:  顯示唯一的行,並在每行行首加上本行在檔案中出現的次數

sort -k1,1nr:  按照第乙個字段,數值排序,且為逆序

head -10:  取前10行資料

nf代表:瀏覽記錄的域的個數

$nf代表 :最後乙個field(列)

nf-3的意思是倒數第三個字段,ssh2是第-0個字段,663951是第-1個字段....

192.168.0.78是第-3個字段。

nf代表:瀏覽記錄的域的個數

$nf代表 :最後乙個field(列)

grep "failed" /var/log/secure | awk ''

也有前者是輸出了域個數,後者是輸出最後乙個欄位的內容

如:~# echo $pwd | awk -f/ ''

nr,表示awk開始執行程式後所讀取的資料行數.

fnr,與nr功用類似,不同的是awk每開啟乙個新檔案,fnr便從0重新累計.

在看乙個例子關於nr和fnr的典型應用:

#cat a

張三|000001

李四|000002

#cat b

000001|10

000001|20

000002|30

000002|15

想要得到的結果是將使用者名稱,帳號和金額在同一行列印出來,如下:

張三|000001|10

張三|000001|20

李四|000002|30

李四|000002|15

awk -f'|' 'nr==fnr' a b

awk -f'|' 'nr>fnr' a b

[解析]

由nr=fnr成立,判斷當前讀入的是第乙個檔案a,然後使用迴圈將a檔案的每行記錄都存入陣列a,並使用$2作為下標引用.next,不在執行後面的語句.

由nr=fnr不成立,判斷當前讀入了第二個檔案b,然後跳過,對第二個檔案b的每一行都無條件執行,此時變數$1為第二個檔案的第乙個字段,與讀入第乙個檔案時,採用第乙個檔案的$2為陣列下標相同.因此可以在此輸出該陣列的值。

awk

''

儘管操作可能會很複雜,但語法總是這樣,其中 pattern 表示 awk 在資料中查詢的內容,而 action 是在找到匹配內容時所執行的一系列命令。花括號({})不需要在程式中始終出現,但它們用於根據特定的模式對一系列指令進行分組。 pattern就是要表示的正規表示式,用斜槓括起來。

awk語言的最基本功能是在檔案或者字串中基於指定規則瀏覽和抽取資訊,awk抽取資訊後,才能進行其他文字操作。完整的awk指令碼通常用來格式化文字檔案中的資訊。

通常,awk是以檔案的一行為處理單位的。awk每接收檔案的一行,然後執行相應的命令,來處理文字。

awk [-f  field-separator]  '

commands

' input-file

(s)其中,commands 是真正awk命令,[-f域分隔符]是可選的。 input-file

(s) 是待處理的檔案。

在awk中,檔案的每一行中,由域分隔符分開的每一項稱為乙個域。通常,在不指名-f域分隔符的情況下,預設的域分隔符是空格。

將把字元 h 作為第二個欄位的第乙個字元和最後乙個字元的所有記錄列印至標準輸出

#awk  '$2 ~ /^h/'  file

#awk  '$2 ~ /h$/'  file

# 刪除每行結尾的空白(包括空格符和製表符)

awk ''

linux 如何顯示乙個檔案的某幾行(中間幾行)

【一】從第3000行開始,顯示1000行。即顯示3000~3999行

cat filename | tail -n +3000 | head -n 1000

【二】顯示1000行到3000行

cat filename| head -n 3000 | tail -n +1000

*注意兩種方法的順序

分解:tail -n 1000:顯示最後1000行

tail -n +1000:從1000行開始顯示,顯示1000行以後的

head -n 1000:顯示前面1000行

【三】用sed命令

sed -n '5,10p' filename 這樣你就可以只檢視檔案的第5行到第10行。

nf代表:瀏覽記錄的域的個數

$nf代表 :最後乙個field(列)

linux 下查詢檔案操作

du ah max depth 1 查詢當前目錄下大於100m的檔案 find type f size 100m exec ls lh awk 當找到大檔案後,若因某些原因,不想對檔案進行刪除,可以用echo或cat或clear命令清除檔案內容 echo var log big.log 此命令會把 ...

Linux find 查詢檔案

在日誌資料夾下判斷是否有web伺服器的日誌資料夾,寫了個指令碼 bin bash cd wls annuity acc for sys in cat wiiserver name list.txt do find logs sys name sys xargs echo en n 123.txt f...

Linux查詢檔案

which locate whereis find which命令 用途 查詢可執行檔案並顯示所在的位置,適用於系統命令,shell命令無法查詢 which lsb release 檢視命令的絕對路徑,即這個可執行檔案的位置 usr bin lsb release which cd 查詢不到路徑,c...