最近在进行小组项目的过程中需要进行数据处理,尤其是数据的清洗整理,再次过程中发现了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