Contents

几个非常好用的文本处理工具的简单用法(持续更新中)

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

1
awk '!a[$0]++' log.txt

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行

1
split -l 10 date.file

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

参考

  1. https://www.runoob.com/linux/linux-comm-awk.html
  2. https://man.linuxde.net/split
  3. https://man.linuxde.net/sed
  4. https://man.linuxde.net/sort