天天看點

linux 中shell檔案内容,Linux Shell指令之文本内容分析

linux文本分析處理指令很多,日志分析等日常實用的較多的有cat、awk、sed、tr、uniq、sort、cut、head、tail、more、wc主要用途如下:

cat: 檢視檔案内容,全部輸入到終端

more:檢視内容,每次顯示輸出終端高度的内容,空格翻頁

awk: 通過用來對文本行進行分隔符split,過濾提取指定列,為後續處理分析提供資料源

sed: 主要用于對文本行内容進行增删改

tr: 類似sed、替換修改文本行内容

uniq:常用去重、取文本交集與并集

sort:常用語輸出内容排序

cut: 類似awk -F,根據分隔符提取文本某列内容

head:取檔案前n行

tail:取檔案末尾n行

wc: 統計行數

以下指令是日常工作使用頻率比較高的方法,總結如下:

1.檔案内容分析awk

awk -F '\t' '{print $7}' samples.txt #按tab分割,輸出第七個字段

samples.txt

···

1 2 3 4 5 6 7 8

2 3 7 9 0 11 13 12

···

輸出:

···

7

13

···

2.行尾追加字元串sed

sed 's/$/,x1/g' samples.txt #每行後追加’,x1’

samples.txt

···

1 2 3 4 5 6 7 8

2 3 7 9 0 11 13 12

···

輸出:

···

1 2 3 4 5 6 7 8,x1

2 3 7 9 0 11 13 12,x1

···

3.sed删除空行

cat samples.txt |sed '/^$/d’

samples.txt

···

1 2 3 4 5 6 7 8

2 3 7 9 0 11 13 12

7 3 8 9 10 11 4 12

···

輸出:

1 2 3 4 5 6 7 8

2 3 7 9 0 11 13 12

7 3 8 9 10 11 4 12

4.tr删除特殊字元,如^M

cat samples.txt | tr -d "\r"

samples.txt

···

1 2 3 4 5 6 7 8^M

7 3 8 9 10 11 4 12^M

···

輸出:

···

1 2 3 4 5 6 7 8

7 3 8 9 10 11 4 12

···

5.sed符号替換

cat samples.txt |sed 's/|/\n/g' #将|替換為n

samples.txt内容

···

1|2|3

···

輸出:

···

1n2n3

···

6.檔案排序去重

cat samples.txt |sort|uniq

samples.txt内容

···

1

2

1

3

4

2

3

···

輸出:

1

2

3

4

7.替換字元

cat samples.txt|tr "^M" " "

samples.txt

···

1 2 3 4 5 6 7 8^M

7 3 8 9 10 11 4 12^M

···

輸出:

···

1 2 3 4 5 6 7 8

7 3 8 9 10 11 4 12

···

8.統計排序

cat samples.txt | head -100000 |cut -d\& -f1|sort |uniq -c |sort -k1nr|more #檔案前10000條,cut取第一列,按出現次數倒序

9.sort與uniq檔案交集

cat samples1.csv samples2.csv |sort|uniq -d

samples1.csv

···

1

2

3

4

···

samples2.csv

···

3

4

6

7

···

結果:

···

3

4

···

10.sort與uniq檔案并集

cat samples1.csv samples2.csv |sort|uniq -u

samples1.csv

···

1

2

3

4

···

samples2.csv

···

3

4

6

7

···

結果:

···

1

2

6

7

···

11.sed正規表達式比對内容

sed 's/[0-9]\{1,\}$//p’ samples.dic # 輸入出正則比對的行[0-9]\{1,\}$

12.awk按長度過濾

awk -F '\t' '{split($2,array,",");if(length(array)>=500) print $0}' samples.txt #輸出第2列按,分割長度大于500的行

13.查找目錄下包含字元串的檔案

grep -r "118.26.145.26" . # 輸出包含118.26.145.26的檔案,出現多次重複輸出

find . |xargs grep "118.26.145.26"