持续更新一些linux命令积累——字符串处理相关

Posted FesianXu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了持续更新一些linux命令积累——字符串处理相关相关的知识,希望对你有一定的参考价值。

工作中遇到的数据很多都是按照字段进行组织的,分隔符通常是制表符\\t,如下所示:

seg_A	seg_B	seg_C
...
...
...

这种格式可以组织各种数据,比如日志文件,训练/测试数据,用户行为数据等,这些数据都是字符串的形式,并且按照每行一个样本,每列一个字段的形式进行储存。linux中有很多工具和命令处理此类数据非常方便,这里简单笔记下。

打印某一列

采用awk可以做到。

cat your_file | awk '{print $1}' # 打印第一列
cat your_file | awk '{print $NF}' # 打印最后一列

查找字符串

采用sed, grep ,大杀器awk当然也可,不过没必要。

cat your_file | sed -n '/string_pattern/p'
cat your_file | grep "your_string"
cat your_file | grep -E "string_pattern"

新增一列

采用awk, 假如原本的文件如:

# file: your_file
1	2	3
4	5	6
7	8	9

那么在最后一列添加上字符A,可以用以下脚本

cat your_file | awk '
BEGIN{string="A"}
{
	for(i=0; i<=NF; i++)
	{
		printf($i);
		printf("\\t");
	}
	printf("%s\\n", a);
}'

其输出结果是:

1	2	3	A
4	5	6	A
7	8	9	A

我们发现awk的可执行代码非常类似于C语言,并且awk是对每一行为单位进行处理的,这意味着以上的代码会对文件中的每一行进行相同的操作。

替换字符串

替代字符串这个操作可以由非常多的工具进行,比如sed, tr, 万能的awk等。个人喜欢用sed

cat your_file | sed -n 's/old_string/new_string/p'

大小写字母转换

tr命令适合用于字符串的转换,压缩和删除。

echo "AbC" | tr -t [A-Z] [a-z]

输出为abc

数据筛选

有时候需要对每一列的某些数值指标(离散的或者连续的)进行筛选,可以采用awk轻松搞定。原数据如:

# file: your_file
data_a	data_b	1.0
data_a	data_b	0.5
data_a	data_b	0.8
data_a	data_b	0.3
data_a	data_b	None

那么挑选所有最后一列大于0.5的行,可以

cat your_file | awk '$3>0.5'

输出为:

data_a	data_b	1.0
data_a	data_b	0.8
data_a	data_b	None

为了筛出掉缺省值None,也可以选择同时筛选多个条件,通过与(&&)或(||)非(!)连接起来,如下面的第一条

cat your_file | awk '$3>0.5 && $3!="None"'
cat your_file | awk '$3>0.5 && $3<0.8'
cat your_file | awk '$3<0.5 || $3>0.8'
cat your_file | awk '$3!=0'

以上是关于持续更新一些linux命令积累——字符串处理相关的主要内容,如果未能解决你的问题,请参考以下文章

[Linux]_[初级]_[用户相关命令]持续更新*

计算机相关零碎知识(持续更新)

Linux相关命令(持续更新...)

《linux实用指令积累》持续更新。。。

adb命令积累(持续更新)

Linux项目中常用命令(持续更新中。。。)