解析Linux中awk和sed的区别 (linux awk sed 区别)

在Linux系统中,awk和sed是两个非常常见的工具,它们都是文本处理工具,用于处理文本文件。虽然它们具有相似的功能,但是它们之间还是有很大的区别。本文将对它们的区别进行解析。

1. 定义

awk是一种处理文本文件的工具,它可以对文本文件进行复杂的操作,比如查找、替换、排序、计算等。awk的名称来自于其创始人的全名:Alfred Aho、Peter Weinberger和Brian Kernighan。

而sed是一种流编辑器,主要用于对文本文件进行流式处理。sed的名称来自于其命令序列编辑器的名称流的首字母和单词编辑器的首字母。

2. 用途

awk和sed都可以用来处理文本文件,但是它们的用途略有不同。awk更适合用于处理结构化数据,比如分隔符分隔的文件或者表格格式文件。它可以对文件进行分组、计算、过滤等操作。awk还可以对普通的文本进行处理,并且可以用于编写脚本。

sed则更适合用于对文本文件进行替换、插入、删除等操作。它通常用于处理单行数据而不是多行数据。

3. 语法

awk和sed的语法也有所不同。awk的语法是由模式、动作和输入文件组成的。模式用于匹配文本,动作用于对匹配到的文本进行处理,输入文件则是要进行处理的文件。

而sed的语法是由地址、命令和输入文件组成的。地址用于确定要处理的文本范围,命令用于对文本进行操作,输入文件则是要进行处理的文件。

4. 编程能力

awk与sed相比,具有更强的编程能力。awk支持变量、条件和循环等基本编程语言的元素,可以编写复杂的脚本。而sed的编程能力则相对较弱,主要用于进行文本替换、删除等操作。

5. 性能

awk与sed在性能上也有差异。awk更适合用于处理大文件,因为它可以在内存中缓存数据,而sed则不行。如果要处理的是小文件,则sed的速度会更快。

6. 应用场景

awk和sed都有自己的应用场景。如果需要对结构化数据进行处理,比如表格格式文件或者csv格式文件,使用awk会更好。而如果需要进行文本替换或删除操作,使用sed会更方便。

综上所述,awk和sed是两个非常常用的文本处理工具,它们虽然有相似的功能,但是它们之间还是有很大的区别。根据不同的需求和场景,我们可以选择使用不同的工具。

相关问题拓展阅读:

linux三剑客是什么意思

linux三剑客命令-grep、sed、awk

grep 命令 :强大的文本’搜索’工具

1.grep -n ‘word’ file_name

在file_name文件中找到word所在的所有行并显示。-n 为显示行号。

2.grep ‘wll’ file_name

在file_name文件中找到wall 或者是well 所在的所有行并显示

3.grep ‘wll’ file_name

在file_name文件中找到”非well” 所在的所有行并显示

4.grep ‘^The’ file_name

在file_name文件中找到以The开头的所有行并显示(请与上一条命令进行区别)

5. grep’goo..le’ file_name

在file_name文件中找到goo(任意字符)(任意字符)le的所有行并显示(即总共七个字符)

6.grep ‘g*g’ file_name

在file_name文件中找到g , gg , ggg等的所有行并显示(*代表重复前一个字符0~~无穷多次)

7.grep ‘Ty\{2,3\}’ file_name

在file_name文件中找到Tyy,Tyyy的所有行并显示(注意{}在 shell中有特殊含义,故需要转义)

注意 : grep可以使用grep –color=always 来使得所查找的字符拥有特殊颜色,然后在执行source ~/.bashrc 来使得设置立即生效。

sed :实现数据的替换,删除,增加,选取等(以行为单位进行处理)

1.sed ‘2,4d’ file_name

删除file_name文件的2到4行

2.sed ‘2a liu …..\

>shengxi is shuai !!!’ file_name

在第二行下新增这样两行

3.sed ‘2,4c ni han ma a !!!’ file_name

把file_name文件的2到4行,替换为ni han ma a !!

4.sed ‘2,5p’ -n file_name

把file_name文件的2到5行打印出来(不用-n 参数,就会重复输出2到5行)

5.sed -i ‘s/a\\./p_temp->/g’ file_name

把file_name文件中的a. 全部替换为p_temp-> (-i 会直接将修改写入文件, 和 . 是特殊符号,需要用\来转义一下)

awk : 以字段为单位进行处理(其实就是把一行的数据分割,然后进行处理)

先介绍一些关于awk的用法:

1.$0 代表一整行的数据

2.$1 代表第隐埋一个字段,用人的话来说就是之一列的数据

3.$2 以此类推

4.NF 每一行拥有的字段总数

5.NR 目前处理的是第几行的凳漏数据

6.FS 目前的分隔字符

7.命令格式 :awk ‘条件{命令1} 条件{命令2}…’ file_name

具体命令:

1. awk ‘NR

把file_name 文件中的前五行的之一列,第二列的数据列出来 (以或空格键分隔)

2.awk ‘{print “该行数据为” $0 “\t” “该行的字段总数为” NF “\t” “目前这是第几行” NR}’ file_name

3. awk ‘BEGIN{FS=”:”} $3

把/etc/passwd文件的之一列与第三列列出来(BEGIN可以让我们自己设置的分隔字符立即生效)

/etc/passwd 文件中之一列是帐户,第三列是UID(就是用户ID)。该文枣携烂件以 : 号分隔,一行代表一个用户,记录关于用户的各种信息。

特殊说明:

1.print 默认带有换行符,printf 没有

2.像\n ,\t,这种符号应该用双引号括起来

3.NR,NF等变量要用大写,并且不需要 $

三剑客命令总结:

-记住三个命令的运用形式

grep ‘字符’文件

sed ‘命令’文件

awk ‘条件{命令}’ 文件

-死记一点,单引号内就是正则表达式的用法

重复一遍:单引号内一定是正则表达式,一定,一定!!!

shell命令: awk grep sed

grep

是一个强大的文本搜索工具,能使用正则表达式搜索文本,并把匹配的行打印出来,grep全称是Global Regular Expression

Print,表示全局正则表达式版本,它的使用权限是所有用户。

grep的工作方式是,它在一个或多个文扮樱兄件中搜索字符串模板,如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名,搜索的结果被送到标准输出,不影响原文件内容。

grep可以用于shell脚本,因为厅袭grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2,可以利用这些返回值,进行一些自动化的文本处理工作。

awk

awk是一种编程语言,用于在Linux/Unix下对文本和数据进行处理,数据可以来自标准输入、一个或多个文件,或其他命令的输出,它支持用户自定义函数和动态正则表达式等先进功能,是Linux/Unix下的一个强大编程工具,它在命令行中使用,但更多是作为脚本来使用。

awk有很多内建的函数,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk更大的优点。

sed

是一种流编辑器,一次处理一行内容,把当前处理的行存储在临时缓冲颂虚区中,称为模式空间,接着用sed命令来处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。

然后读入下行,执行下一个循环,文件内容并没有改变,除非你使用重定向存储输出或-i。

linux里awk是做什么的,请详细说明

awk语言的最基本功能是在文件或字符串李郑凳中基于指定规则来哪旅分解抽取信息,也可以丛大基于指定的规则来输出数据。完整的awk脚本通常用来格式化文本文件中的信息。

你比如:

echo “11|22|33” | awk -F “|” ‘{print $2}’

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部孙卖分再进行各种分析处理。

awk有三个不同的版本:awk、nawk和gawk,未作特别说明,一般指gawk,gawk是awk的GNU版本。

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

的首字符。

使用方法:

awk'{pattern+action}'{filenames}

尽管操作可能会很复杂,厅凯裂但语法总是这样,其中pattern表示awk在数据中查找的内容,而action是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。pattern就是要表示的正则表达式,用斜杠括起来。

awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。

通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。

调用awk的三种方式

1、命令行方式

awk’commands’input-file(s)

其中,commands是真正awk命令,是可选的。input-file(s)是待处理的文件。

在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔扮闭符的情况下,默认的域分隔符是空格。

2、shell脚本方式

将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。

相当于shell脚本首行的:#!/bin/sh

可以换成:#!/bin/awk

3、将所有的awk命令插入一个单独文件,然后调用:

awk-f awk-script-file input-file(s)

其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。

linux awk sed 区别的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux awk sed 区别,解析Linux中awk和sed的区别,linux三剑客是什么意思,linux里awk是做什么的,请详细说明的信息别忘了在本站进行查找喔。


数据运维技术 » 解析Linux中awk和sed的区别 (linux awk sed 区别)