最近在进行小组项目的过程中需要进行数据处理,尤其是数据的清洗整理,再次过程中发现了linux的几个命令行下的文本处理工具(awk、sed等)真的特别好用,即使是大文件处理起来也非常高效,之前也使用过,但一般是需要用什么就搜索什么,这次整理一下常用的或者非常好用的命令以供以后参考。
1.awk
awk处理csv等表格文件,按列处理真的特别方便
1.1 按照特定顺序提取
输出也为csv格式
| 1
 | awk -F, '{print $1,$2,$5}' OFS=","  log.txt
 | 
 
1.2 过滤满足特定条件的行
| 1
 | awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt
 | 
 
1.3 使用正则表达式匹配行
| 1
 | awk '$2 ~ /th/ {print $2,$4}' log.txt
 | 
 
1.4 去除重复行
2.sed
2.1 添加或删除某一行
| 1
2
3
4
5
6
 | # 加第一行
sed -i '1i\this is a test line' test.conf
# 加最后一行
sed -i '$a\this is a test line' test.conf
# 删除空白行
sed '/^$/d' file
 | 
 
2.2 替换
| 1
2
3
4
 | # 使用sed多点编辑
sed -e '3,$d' -e 's/bash/blueshell/'
# 使用tr
cat testfile |tr a-z A-Z
 | 
 
2.3 去除换行
| 1
 | sed ':t;N;s/\n//;b t' a.txt
 | 
 
或者也可以
| 1
 | cat a.txt | tr '\n' ' '
 | 
 
3.文件拆分(split)
3.1 拆分指定大小
每个文件大小为10k,指定后缀为数字,位数为3,前缀为split_file
| 1
 | split -b 10k date.file -d -a 3 split_file
 | 
 
3.2 拆分指定行
每个文件为10行
4.文件合并
4.1 按行合并
| 1
 | cat file1 file2 > file3
 | 
 
4.2 按列合并
指定分隔符(默认为制表符)
| 1
 | paste -d"," file1 file2 > file3
 | 
 
5.排序(sort)
-n是按照数字大小排序,-r是以相反顺序,-k是指定需要爱排序的栏位,-t指定栏位分隔符为冒号
| 1
2
3
4
 | # 去除重复行
sort -u sort.txt
# 按照数字大小排序某一列(从小到大)
sort -nk 2 -t: sort.txt
 | 
 
参考
- https://www.runoob.com/linux/linux-comm-awk.html
- https://man.linuxde.net/split
- https://man.linuxde.net/sed
- https://man.linuxde.net/sort