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"