當前位置: 首頁>>編程語言>>正文


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"
本文由《純淨天空》出品。文章地址: https://vimsky.com/zh-tw/article/3201.html,未經允許,請勿轉載。