秒杀一众文本工具!

简介: 当涉及文件解析或者数据预处理时,你首先想到的编程语言是什么?Python、R、Java等编程语言会出现在脑海里。当然,这些高级编程语言功能强大,通常我们只需要几十行代码就可以实现我们的目标。

当涉及文件解析或者数据预处理时,你首先想到的编程语言是什么?

Python、R、Java等编程语言会出现在脑海里。

当然,这些高级编程语言功能强大,通常我们只需要几十行代码就可以实现我们的目标。

但是,Linux Shell这么强大的工具似乎被很多开发者遗忘了。

因为它的语法相对落后,而且线上教程不那么直观,社区也不是特别完善。所以,很多有开发者会首先想到利用Linux Shell进行数据处理。

在本文中,我将带你了解Shell命令在某些情况下到底有多么强大,更重要的是,你可以轻松学习,并且能够在日常的小需求中使用它。

本文主要围绕awk进行讲解,或许很多同学用过或者了解过awk。因此,在这里就简单的概括一下。

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。

之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

分隔符

分隔符是在数据处理过程中经常会接触到的一类问题,csv、日志文件,会都会涉及各种各样的分隔符。

在处理数据过程中就需要对这些分隔符进行分割、替换,以便于数据的处理和分析。

举个例子,假如我有一份csv数据,是以逗号作为分隔符,

index,col1,col2,col3
1,5,6,7
2,a,b,c
3,uu,vv,ww

现在我需要把逗号修改为tab,可以用下方命令:

awk '{$1=$1}1' FS="," OFS="\t" file4.csv > file4.txt

下面看一下输出结果,

index col1  col2  col3
1 5 6 7
2 a b c
3 uu  vv  ww

如果使用编程语言,此时你需要打开IDE,新建项目,编写代码。如果使用Linux Shell,只需要打开终端命令行即可。

现在让我们深入研究语法本身,解释一下上述命令的作用:

  • {$1=$1}1:重置缓冲区
  • FS=",":原始分隔符
  • OFS="\t":新的分隔符

然后,你只需要指定输入文件和输出文件即可!

相对于编程语言,Shell命令最酷的地方是,它通常预装在您的PC上,你无需担心设置环境,安装软件包(例如python pandas软件包)的麻烦。

转置

为了说明问题,假设你有以下文件:

item1 item2 item3 item4

为了使它们垂直显示,你只需要一行代码:

awk '{for(i=1;i<=NF;i++){print $i}}' file5.txt > file5_new.txt

输出结果:

item1 
item2 
item3 
item4

这个awk命令的作用是,对于每一行(在此输入文件中,我们只有一行),在列上进行遍历,从索引i = 1(第一列)开始,以索引i = NFNF结束 是awk中的特殊变量,代表每行的长度。

因此,上面的命令简单地说,对于列中的每个item,我们将其一一打印出来,每个item将占据整行,这使我们能够在这里实现自己的目标。

然后您可能会问,如果我有一个垂直输出,但我希望水平显示,您能撤消操作吗?当然!

cat file5_new.txt | tr '\n' ' ' | awk '{$1=$1}1' FS=" " OFS="\t" > file5_restore.txt

来看一下结果:

item1 item2 item3 item4

对这个命令的一些解释,我们首先使用cat读取文件,然后使用tr命令将每一行的换行符替换为空格,这就可以实现我们的目标。

awk基本用法

通过前面的示例,已经清楚了awk的强大之处,下面通过一个非常经典的任务,来指导你了解awk命令的基本语法。

假设你有一个如下文件:

index col2  col3  col4
i1  John  56  male
i2  Mary  34  female
i3  Frank 23  male
i4  Chris 58  female

我想知道col3的总和,可以在一行代码中实现吗?

这很有用,因为在现实生活中,输入文件可能有100万行,而不是示例中简单的4行。

awk 'BEGIN{FS="\t";count=0}{if(NR>1){count+=$3}}END{print count}' file6.txt
#输出 171

下面,介绍一下awk常用的标识符,这样就能够很清楚的了解上述命令的原理:

  • BEGIN:在开始处理每一行之前执行
  • MAIN:在处理每一行过程中执行
  • END:在结束每一行的处理之后执行
  • FS:输入文件的分隔符
  • OFS:输出文件的分隔符
  • NR:行号
  • NF:每一行的长度

awk逐行处理文件,但是它将在处理每一行之前可以在BEGIN中执行某些操作,并在完成处理每一行后执行一些操作。此属性使我们能够轻松地计算均值或总和。

因此,针对上述问题,当我们初始化一个计数变量并将其值累加到最后时,我们可以打印出最终的计数或将其取平均值以获得均值。

这样一来,我们将发现仅使用awk就可以在Linux Shell中完成许多任务。

为什么使用Linux Shell

目前,Python可以以更结构化的格式解决大多数任务的事实,为什么我们需要学习Shell命令?

答案是,Shell具有如下独特的优势:

  • 在Python中,我们需要处理变量,在内存中处理了数十个变量,然后,获得了所需的输出。但是在Shell中,我们处理的对象是文件,这使得,你只需要几行代码就可以完成成千上万文件的处理。
  • Shell命令允许你执行跨语言任务,或将多个Python,R甚至Matlab脚本粘合在一起作为元脚本。
  • 在某些情况下,Shell命令比其他脚本语言更方便。
  • Linux系统普遍存在于云计算平台,不需要经过任何额外配置

结语

开发过程中,首先应该清晰的认识到我们的目标是完成任务,而不是“炫技”。

解决一个问题可以寻找出很多不同的方法,但是如果在忙碌的工作中选取出最有效的方法,提升效率,这需要作为开发者的我们认真考虑的。

处理文件和数据过程中,使用Shell一行代码就可以实现其他语言几十行才能完成的任务,何乐而不为呢?

相关文章
|
9月前
|
搜索推荐 安全 API
API接口的艺术:如何巧妙获取商品数据
在数字时代,API接口已经成为连接不同软件系统、共享数据的桥梁。尤其在电商领域,商品数据的实时获取和处理对于提供个性化服务、优化用户体验至关重要。本文将深入探讨API接口的艺术,以及如何通过它们高效地获取和管理商品数据。
|
JSON API 数据格式
快手API接口:根据关键词获取海量商品列表的秘诀
快手API接口:根据关键词获取海量商品列表的秘诀
197 1
正则表达式和表单辅助特效&&淘宝购物车
正则表达式和表单辅助特效&&淘宝购物车
|
4月前
|
UED
Midjourney-02 收集Prompt 咕卡手账 零件套装展示 可爱猫猫 线稿生成 2077猫猫 niji 5 niji 6 对比 详细记录 超多图片 多种风格 附带文本 关键词
Midjourney-02 收集Prompt 咕卡手账 零件套装展示 可爱猫猫 线稿生成 2077猫猫 niji 5 niji 6 对比 详细记录 超多图片 多种风格 附带文本 关键词
50 0
|
8月前
|
JavaScript 数据安全/隐私保护 开发者
开源图片编辑器推荐-可用于海报编辑、商品设计、封面设计、标签设计等场景
推荐开源图片编辑器,基于fabric.js和Vue开发,适合海报、Logo等设计场景。拥有4.4K GitHub Stars,特性包括自定义字体、素材、模板,支持插件扩展、右键菜单及快捷键。提供图片滤镜、裁剪、拖拽、PSD导入、水印设置和分类素材管理。适用于非专业设计者,易于二次开发。
开源图片编辑器推荐-可用于海报编辑、商品设计、封面设计、标签设计等场景
|
9月前
|
JSON 搜索推荐 数据挖掘
电商数据分析的利器:电商关键词搜索API接口(标题丨图片丨价格丨链接)
淘宝关键词搜索接口为电商领域的数据分析提供了丰富的数据源。通过有效利用这一接口,企业和研究人员可以更深入地洞察市场动态,优化营销策略,并提升用户体验。随着电商平台技术的不断进步,未来的API将更加智能和个性化,为电商行业带来更多的可能性。
|
9月前
|
小程序 JavaScript Java
购物|电商购物小程序|基于微信小程序的购物系统设计与实现(源码+数据库+文档)
购物|电商购物小程序|基于微信小程序的购物系统设计与实现(源码+数据库+文档)
139 0
|
9月前
|
JSON 安全 API
解锁淘宝商品评论API接口:电商数据分析的新视角
淘宝商品评论API接口是淘宝开放平台提供的一组API接口,允许开发者通过编程方式获取淘宝商品评论数据。这些接口可以获取到商品的详细信息、用户评论、评分等数据,为电商数据分析提供了丰富的素材。
|
JavaScript 前端开发
37分布式电商项目 - 网站首页(广告展示)
37分布式电商项目 - 网站首页(广告展示)
51 1
|
9月前
|
前端开发 JavaScript 双11
双十一互动图片和文字的处理方案
双十一互动图片和文字的处理方案
118 0