导航:首页 > 净水问答 > awk过滤第一行

awk过滤第一行

发布时间:2020-12-24 07:45:48

A. 在awk中怎么把一行中的字符串后的\n去掉

awk '{printf $0}' xxx
printf默认不换行的,print是默认换行输出,你用不换行的输出就去掉了最后的一个\n了

B. 如何使用 awk 和正则表达式过滤文本或文件中的字符串

正则表达式的特点
正则表达式由以下内容组合而成:
普通字符,例如空格、下划线、A-Z、a-z、0-9。
可以扩展为普通字符的元字符,它们包括:
(.)
它匹配除了换行符外的任何单个字符。
(*)
它匹配零个或多个在其之前紧挨着的字符。
[ character(s) ]
它匹配任何由其中的字符/字符集指定的字符,你可以使用连字符(-)代表字符区间,例如 [a-f]、[1-5]等。
^
它匹配文件中一行的开头。
$
它匹配文件中一行的结尾。
\
这是一个转义字符。
你必须使用类似 awk 这样的文本过滤工具来过滤文本。你还可以把 awk 自身当作一个编程语言。但由于这个指南的适用范围是关于使用 awk 的,我会按照一个简单的命令行过滤工具来介绍它。
awk 的一般语法如下:
# awk 'script' filename
此处
'script'
是一个由 awk 可以理解并应用于 filename 的命令集合。
它通过读取文件中的给定行,复制该行的内容并在该行上执行脚本的方式工作。这个过程会在该文件中的所有行上重复。
该脚本
'script'
中内容的格式是
'/pattern/ action'
,其中
pattern
是一个正则表达式,而
action
是当 awk 在该行中找到此模式时应当执行的动作。
如何在 Linux 中使用 awk 过滤工具
在下面的例子中,我们将聚焦于之前讨论过的元字符。
一个使用 awk 的简单示例:
下面的例子打印文件 /etc/hosts 中的所有行,因为没有指定任何的模式。
# awk '//{print}' /etc/hosts
awk 打印文件中的所有行
结合模式使用 awk
在下面的示例中,指定了模式
localhost
,因此 awk 将匹配文件
/etc/hosts
中有
localhost
的那些行。
# awk '/localhost/{print}' /etc/hosts
awk 打印文件中匹配模式的行
在 awk 模式中使用通配符 (.)
在下面的例子中,符号
(.)
将匹配包含 loc、localhost、localnet 的字符串。
这里的正则表达式的意思是匹配 l一个字符c。
# awk '/l.c/{print}' /etc/hosts
使用 awk 打印文件中匹配模式的字符串
在 awk 模式中使用字符 (*)
在下面的例子中,将匹配包含 localhost、localnet、lines, capable 的字符串。
# awk '/l*c/{print}' /etc/localhost
使用 awk 匹配文件中的字符串
你可能也意识到
(*)
将会尝试匹配它可能检测到的最长的匹配。
让我们看一看可以证明这一点的例子,正则表达式
t*t
的意思是在下面的行中匹配以
t
开始和
t
结束的字符串:
this is tecmint, where you get the best good tutorials, how to's, guides, tecmint.
当你使用模式
/t*t/
时,会得到如下可能的结果:
this is t
this is tecmint
this is tecmint, where you get t
this is tecmint, where you get the best good t
this is tecmint, where you get the best good tutorials, how t
this is tecmint, where you get the best good tutorials, how tos, guides, t
this is tecmint, where you get the best good tutorials, how tos, guides, tecmint

/t*t/
中的通配符
(*)
将使得 awk 选择匹配的最后一项:
this is tecmint, where you get the best good tutorials, how to's, guides, tecmint
结合集合 [ character(s) ] 使用 awk
以集合 [al1] 为例,awk 将匹配文件 /etc/hosts 中所有包含字符 a 或 l 或 1 的字符串。
# awk '/[al1]/{print}' /etc/hosts
使用 awk 打印文件中匹配的字符
下一个例子匹配以
K

k
开始头,后面跟着一个
T
的字符串:
# awk '/[Kk]T/{print}' /etc/hosts
使用 awk 打印文件中匹配的字符
以范围的方式指定字符
awk 所能理解的字符:
[0-9]
代表一个单独的数字
[a-z]
代表一个单独的小写字母
[A-Z]
代表一个单独的大写字母
[a-zA-Z]
代表一个单独的字母
[a-zA-Z 0-9]
代表一个单独的字母或数字
让我们看看下面的例子:
# awk '/[0-9]/{print}' /etc/hosts
使用 awk 打印文件中匹配的数字
在上面的例子中,文件 /etc/hosts 中的所有行都至少包含一个单独的数字 [0-9]。
结合元字符 (^) 使用 awk
在下面的例子中,它匹配所有以给定模式开头的行:
# awk '/^fe/{print}' /etc/hosts
# awk '/^ff/{print}' /etc/hosts
使用 awk 打印与模式匹配的行
结合元字符 ($) 使用 awk
它将匹配所有以给定模式结尾的行:
# awk '/ab$/{print}' /etc/hosts
# awk '/ost$/{print}' /etc/hosts
# awk '/rs$/{print}' /etc/hosts
使用 awk 打印与模式匹配的字符串
结合转义字符 (\) 使用 awk
它允许你将该转义字符后面的字符作为文字,即理解为其字面的意思。
在下面的例子中,第一个命令打印出文件中的所有行,第二个命令中我想匹配具有 $25.00 的一行,但我并未使用转义字符,因而没有打印出任何内容。
第三个命令是正确的,因为一个这里使用了一个转义字符以转义 $,以将其识别为 '$'(而非元字符)。
# awk '//{print}' deals.txt
# awk '/$25.00/{print}' deals.txt
# awk '/\$25.00/{print}' deals.txt

C. linux sed awk命令结合匹配符 根据第二行内容,替换第一行内容 可以写成shell脚本

我也给个思路吧 —— 用sed根据地址范围截取文件内容,用Here documents方法添加新的多行内容,然后重组文件。具体步骤如下:

1)截取test.xml文件起始行到<abcdef>行,保存到tmp文件;
2)将要添加的内容根据变量值展开,附加写入tmp文件;
3)截取test.xml文件</abcdef>行到结束行,附加写入tmp文件。
4)移动tmp文件覆盖test.xml文件。

代码:
12345678910111213#!/bin/sh$hostnames="host1,host2,host3 ..."$paragraph="many_strings"sed -n '1,/^<abcdef>/p' test.xml >tmpcat <<EOF >>tmpfor hname in `echo "$hostnames" | tr ',' ' '`do insert $hname insert $paragraphdoneEOFsed -n '/^<\/abcdef>/,$p' test.xml >>tmpmv tmp test.xml
注意:
1) for a in b 结构中,b集合里的内容必需要空格分隔。所以我这里做了转换,用tr命令将逗号分隔改为了空格分隔。
2)第二个EOF必需顶格写,前面不能有空格。

D. linux 中可以用cut提取某一行的某一列数据吗 如果可以怎么做

可以。
cut -d" " -f2 filename
意思就是我以空格为列的分隔符,提取第二列

或者使用awk
awk '{print $2}' filename
awk默认以空格为分隔符,打印第二列

E. 用SELL或awk将每行的第三到第七的字符取出来,并进行排序

由于抄 UNIX/Linux 的 SHELL 是一个功能十分强大的脚本语言,几乎可以依靠 SHELL 编程完成人们想到的各种功能。因此使用 UNIX/Linux 下面的 SHELL 编程、以及结合 awk、sed 等脚本处理工具编写功能十分强大的各种文本处理脚本,由于本人已经有很久都没有编写过这样的 SHELL 脚本程序了,故只能够给你提供一个编程思路就是:查看关于 UNIX 系统下面的 SHELL 编程指南、以及 awk 、sed 命令的各种参数(不同的参数对文本文件的处理结果是截然不同的)对文本文件产生的结果。
另外提醒的就是要注意:不同版本的 SHELL 编程风格(例如:bash、C-Shell),其语法、语句并不是兼容的、其语法是相当严格的,所以有时候即使差那么一点点(哪怕是一个回车换行符),SHELL 脚本程序都通不过。这也是 SHELL 编程非常难于调试的一个问题。这都是我当初进行SHELL编程时碰到过的困难。

F. 巧用awk:如何把多行日志变成一行

如果是所有的抄行都变成1行,可以用:

awk '{printf "%s", $0}' 日志文件名

如果是每N行变一行可以(以N=3为例)

awk '{printf "%s", $0}NR%3==0{printf " "}' 日志文件名

G. awk如何取出它的每一行和某一列的某个元素

假设获得每一行第二列的所有数据

awk'{print$2}'file

如果需要在awk程序中先保存,【在END块或在某行需要使用回其他行中的数答据】

可以用

awk'{d[NR]=$2}END{for(i=1;i<=NR;i++){printd[i]}}'file

H. 如果awk处理得到两行 如何只输出一行例如awk 'if(nf<5)print $0'会得到两行

参考下面的命令,可以在awk命令后通过 | 命令+tail 、head、grep组合来达到你要的效果

---------------------------------------------------
参考下cat、tail、head、tee:文件打印命令
这些命令的语法基本上相同的:命令名 [选项] [文件],而且您可以在管道中使用这些命令。这些命令的功能都是根据特定的条件选择文件内容进行打印。
cat 工具会将文件的全部内容打印到标准输出。
这是最常用的命令之一。例如,您可以使用:
# cat /var/log/mail/info
将邮件程序守护程序日志的内容打印到标准输出[14]。
cat 命令有一个非常有用的选项(-n),该选项将允许您打印行号。
某些文件,如守护程序日志文件(如果相应的守护程序运行了的话)可能非常大[15],在屏幕上打印全部内容可能没什么必要。
您经常只是需要看看一个文件的某几行。
您可以使用 tail 命令完成这一功能。默认情况下,下面的命令将会打印 /var/log/mail/info 文件的最后十行:
# tail /var/log/mail/info
您可以使用 -n 选项显示文件的最后 N 行。例如,要显示最后两行,您应该执行:
# tail -n2 /var/log/mail/info
而 head 命令与 tail 十分相似,只是打印文件的头几行。默认情况下,下面的命令将会打印 /var/log/mail/info 文件的头十行:
# head /var/log/mail/info
和 tail 一样,您也可以使用 -n 选项指定要打印的行数。例如,要打印前两行,您应该执行:
# head -n2 /var/log/mail/info
您还可以组合使用这几条命令。
例如,如果您想要只显示第九行和第十行,您可以先使用 head 命令选择文件的前十行,然后再将结果通过管道送到 tail 命令。
# head /var/log/mail/info | tail -n2
竖线后面的部分将选择最后两行,然后将其打印到屏幕。同样地,您也可以选择只打印文件的倒数第 20 行:
# tail -n20 /var/log/mail/info |head -n1
在本例中,我们让 tail 选择了文件的最后 20 行,然后将结果通过管道传送给 head。然后 head 命令将会从得到的数据中取出第一行打印到屏幕上。
现在我们假定您想要将上例中的结果在屏幕上显示的同时还保存到文件 results.txt。
tee 工具可以帮到我们。其语法是:
tee [选项] [文件]
现在,我们可以将上一命令做如下更改:
# tail -n20 /var/log/mail/info |head -n1|tee results.txt
我们再来举一个例子。我们想要选择最后 20 行,将其保存到 results.txt,但是只在屏幕上显示这 20 行中的第一行。那么,我们应该输入:
# tail -n20 /var/log/mail/info |tee results.txt |head -n1
tee 命令有一个非常有用的选项(-a),它允许您将数据追加到已有文件。
让我们再回过头来看看 tail 命令。像日志这样的文件应该是在不断变化的,因为与其相关的守护程序每时每刻都在记录着它所执行的动作和发生的事件。所以,如果您想要交互地观看日志文件,您可以使用 -f 选项:
# tail -f /var/log/mail/info
在本例中,/var/log/mail/info 文件的所有更改都会立即打印到屏幕上。当您想要知道您系统的工作原理时,使用带 -f 选项的 tail 命令将非常有用。例如,通过查看 /var/log/messages 日志文件,您可以时刻跟踪系统信息和各种守护程序。
在下一节中,我们将会看到如何将 grep 用作过滤器,以便从来自其它服务的信息中拆出 Postfix 信息。

grep: 定位文件中的字符串
不管是命令的名字还是缩写(“General Regular Expression Parser”)都显得非常古怪,但该命令的作用和用法却很简单:grep 将在一个或多个文件中查找给定的模式。其语法为:
grep [选项] <模式> [一个或多个文件]
如果列出了多个文件,将会在每一行结果的开头附加相应的文件名。使用 -h 选项可以不显示这些文件名;使用 -l 选项可以只列出文件名。模式是一个正则表达式,尽管在大多数情况下只是一个简单的单词。下面列出了最常用的几个选项:
-i:进行不区分大小写的搜索;
-v:反转搜索。显示不与模式匹配的行;
-n:显示找到行的行号;
-w:让 grep 在进行模式匹配时匹配整个单词。

I. 如何用awk过滤最后一行的

awk 'END{print}' 1.txt

J. 如何使用 awk 和正则表达式过滤文本或文件中的字符串

awk默认使用空格做为分隔符,可以看到,我输出了"a b c d e" 每个字母之间都有个空格

刚好我可以利用awk默认使用空格作为分隔符这一特点来进行分割过滤

这样过滤出来的第一列就是a,第二列就是b......以此类推。

如果有复杂的、难处理的可以继续追问,我也很喜欢解决这些问题

阅读全文

与awk过滤第一行相关的资料

热点内容
一级纯水的ph应调整为多少 浏览:868
设计污水处理方案的格式 浏览:661
反渗透不出浓水怎么办 浏览:256
污水厂污泥池砂子清理 浏览:826
诊所用上污水处理设施吗 浏览:605
半透膜的市场 浏览:986
集装箱养鱼的污水排放 浏览:126
中文垃圾评论过滤 浏览:877
沁园净水器高压阀是哪个 浏览:11
下水管进进沉淀池管口太低回污水 浏览:369
净化器水质弱碱性怎么调 浏览:590
小饭店用的油烟净化器怎么安装 浏览:937
厨房污水泵怎么选型 浏览:37
智能超纯水机多少钱 浏览:985
饮水机的水用什么排放 浏览:995
用很小的小三角形屏怎么做饮水机 浏览:654
光固化符合树脂 浏览:941
滚筒洗衣机废水还是老式废水 浏览:192
小车有汽油滤芯多少钱 浏览:479
凉水除垢剂是哪一种化学剂 浏览:750