awk 字符串函数

awk 字符串函数
awk 字符串函数

awk提供了许多强大的字符串函数,见下表:

awk内置字符串函数

gsub(r,s) 在整个$0中用s替代r

gsub(r,s,t) 在整个t中用s替代r

index(s,t) 返回s中字符串t的第一位置

length(s) 返回s长度

match(s,r) 测试s是否包含匹配r的字符串

split(s,a,fs) 在fs上将s分成序列a

sprint(fmt,exp) 返回经fmt格式化后的exp

sub(r,s) 用$0中最左边最长的子串代替s

substr(s,p) 返回字符串s中从p开始的后缀部分

substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分详细说明一下各个函数的使用方法。

gsub函数有点类似于sed查找和替换。它允许替换一个字符串或字符为另一个字符串或字符,并以正则表达式的形式执行。第一个函数作用于记录$0,第二个gsub函数允许指定目标,然而,如果未指定目标,缺省为$0。

index(s,t)函数返回目标字符串s中查询字符串t的首位置。length函数返回字符串s字符长度。match函数测试字符串s是否包含一个正则表达式r定义的匹配。split使用域分隔符fs将

字符串s划分为指定序列a。sprint函数类似于printf函数(以后涉及),返回基本输出格式fmt的

结果字符串exp。sub(r,s)函数将用s替代$0中最左边最长的子串,该子串被(r)匹配。sub(s,p)返回字符串s在位置p后的后缀。substr(s,p,n)同上,并指定子串长度为n。

现在看一看awk中这些字符串函数的功能。

1.gsub

要在整个记录中替换一个字符串为另一个,使用正则表达式格式,/目标模式/,替换模式/。例如改变学生序号4842到4899:

$ awk 'gsub('4842/, 4899) {print $0}' grade.txt

J.Troll 07/99 4899 Brown-3 12 26 26

echo "i am hifdafafdst"|awk '{gsub(/am/,"abcc",$0);print $0}'

i abcc hifdafafdst

2.index

查询字符串s中t出现的第一位置。必须用双引号将字符串括起来。例如返回目标字符串Bunny中ny出现的第一位置,即字符个数。

$ awk 'BEGIN {print index("Bunny", "ny")} grade.txt

4

3.length

返回所需字符串长度,例如检验字符串J.Troll返回名字及其长度,即人名构成的字符个数。

$ awk '$1=="J.Troll" {print length($1) " "$1}' grade.txt

7 J.Troll

还有一种方法,这里字符串加双引号。

$ awk 'BEGIN {print length("A FEW GOOD MEN")}'

14

4.match

match测试目标字符串是否包含查找字符的一部分。可以对查找部分使用正则表达式,返回值为成功出现的字符排列数。如果未找到,返回0,第一个例子在ANCD中查找d。因其不存在,所以返回0。第二个例子在ANCD中查找D。因其存在,所以返回ANCD中D出现的首位

置字符数。第三个例子在学生J.Lulu中查找u。

$ awk '{BEGIN {print match("ANCD", /d/)}'

$ awk '{BEGIN {print match("ANCD", /C/)}'

3

$ awk '$1=="J.Lulu" {print match($1, "u")} grade.txt

4

5.split

使用split返回字符串数组元素个数。工作方式如下:如果有一字符串,包含一指定分隔

符-,例如AD2-KP9-JU2-LP-1,将之划分成一个数组。使用split,指定分隔符及数组名。此例中,命令格式为("AD2-KP9-JU2-LP-1",parts_array,"-"),split然后返回数组下标数,这

里结果为4。

还有一个例子使用不同的分隔符。

$ awk '{BEGIN {print split("123#456#678", myarray, "#")}'

3

这个例子中,split返回数组myarray的下标数。数组myarray取值如下:

Myarray[1]="123"

Myarray[2]="456"

Myarray[3]="789"

6.sub

使用sub发现并替换模式的第一次出现位置。字符串STR包含…popedpopopill?,执行下

列sub命令sub(/op/,"op",STR)。模式op第一次出现时,进行替换操作,返回结果如下:

…pOPedpopepill?。

假如grade.txt文件中,学生J.Troll的记录有两个值一样,“目前级别分”与“最高级别分”。只改变第一个为29,第二个仍为24不动,操作命令为sub(/26/,"29",$0),只替换第一个出现24的位置。

$ awk '$1=="J.Troll" sub(/26/, "29", $0)' grade.txt

L.Troll 07/99 4842 Brown-3 12 29 26

L.Transley 05/99 4712 Brown-2 12 30 28

7.substr

substr是一个很有用的函数。它按照起始位置及长度返回字符串的一部分。例子如下:

$ awk '$1=="L.Transley" {print substr($1, 1,5)}' grade.txt

L.Tan

上面例子中,指定在域1的第一个字符开始,返回其前面5个字符。

如果给定长度值远大于字符串长度,awk将从起始位置返回所有字符,要抽取L.Tansley 的姓,只需从第3个字符开始返回长度为7。可以输入长度99,awk返回结果相同。

$ awk '{$1=="L.Transley" {print substr($1, 3,99)}' grade.txt

Transley

substr的另一种形式是返回字符串后缀或指定位置后面字符。这里需要给出指定字符串及其返回字串的起始位置。例如,从文本文件中抽取姓氏,需操作域1,并从第三个字符开始:

$ awk '{print substr($1, 3)}' grade.txt

Troll

Transley

还有一个例子,在BEGIN部分定义字符串,在END部分返回从第t个字符开始抽取的子串。

$ awk '{BEGIN STR="A FEW GOOD MEN"} END {print substr(STR,7)) grade.txt GOOD MEN

8.从shell中向awk传入字符串

awk脚本大多只有一行,其中很少是字符串表示的,这一点通过将变量传入awk命令行会变得很容易。现就其基本原理讲述一些例子。

使用管道将字符串stand-by传入awk,返回其长度。

$ echo "Stand-by" | awk '{print length($0)}'

8

设置文件名为一变量,管道输出到awk,返回不带扩展名的文件名。

$ STR="mydoc.txt"

$ echo $STR | awk '{print subst($STR, 1, 5)}' mydoc

设置文件名为一变量,管道输出到awk,只返回其扩展名。$ STR="mydoc.txt"

$ echo $STR | awk '{print substr($STR, 7)}'

txt

wc详解

wc命令参数及用法详解 wc命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。 语法:wc [选项] 文件... 说明:该命令统计指定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所指定文件的总统计数。下面让我们来简单的看一下其支持的参数及其代表的含义。 参数及含义 举例 demo.txt Welcome to https://www.360docs.net/doc/dc15591823.html, 欢迎来到这里 wc -cwl demo.txt #2 4 39 demo.txt 顺序依次是l w c 强调 这里面大家要注意一点。m和c参数是不能共存的,只有一个可以起作用,看哪个参数在后面。例如: wc -c demo.txt #39 demo.txt wc -m demo.txt #33 demo.txt wc -cml demo.txt #2 33 demo.txt wc -cm demo.txt #33 demo.txt 结果为m的值哦

举一反三 需要把一个文件的行数存在另一个文件里。可是这个wc还会同时输出文件名。咋办?简单,用管道处理一下OK啦 wc -l demo.txt | awk 'BEGIN{FS=" "}{print $1}' 这样,我们就把想要的文件行数给取到了,至于存在另一个文件里,我们可以把awk的print结果重定向到文件。 重要提示 用wc处理文件的时候,一定要在文件末尾存在换行符,否则统计的行数是不正确的。当然多几个换行符是没有问题的。 echo "UNIX" | wc -l # 1 echo -n "UNIX" | wc -l # 0 echo "UNIX\n\n\n" | wc -l # 1 今天看到的命令是:ls -l | wc -l 用来统计当前目录下的文件数

Shell 经典实例

Thizlinux 系统教程 Shell 经典实例 ----------------Milo 经典小shell 1 列目录树的shell 脚本如下: #!/bin/sh # dtree: Usage: dtree [any directory] dir=${1:-.} (cd $dir; pwd) find $dir -type d -print | sort -f | sed -e "s,^$1,," -e "/^$/d" -e "s,[^/]*/([^/]*)$,`----1," -e "s,[^/]*/,| ,g" 2 while中使用read (file是一个文件) cat file | while read line do echo $line echo " :: Please input any key(s):c" str4read="" while true do chr4read=`dd if=/dev/tty bs=1 count=1 2>/dev/null` str4read=$str4read$chr4read if [ "$chr4read" = "" ] ;then break; fi

done echo " :: |$str4read|" done 3 将多个空格替换为字符 sed 's/[ ][ ]*/ /g' 如果空格与tab共存时用 sed -e 's/[[:space:]][[:space:]]*/ /g' filename 4用脚本实现分割文件 #!/bin/bash if [ $# -ne 2 ]; then echo 'Usage: split file size(in bytes)' exit fi file=$1 size=$2 if [ ! -f $file ]; then echo "$file doesn't exist" exit fi

awk命令

什么是awk? 你可能对UNIX比较熟悉,但你可能对awk很陌生,这一点也不奇怪,的确,与其优秀的功能相比,awk还远没达到它应有的知名度。awk是什么?与其它大多数UNIX命令不同的是,从名字上看,我们不可能知道awk的功能:它既不是具有独立意义的英文单词,也不是几个相关单词的缩写。事实上,awk是三个人名的缩写,他们是:Aho、(Peter)Weinberg 和(Brain)Kernighan。正是这三个人创造了awk---一个优秀的样式扫描与处理工具。 AWK的功能是什么?与sed和grep很相似,awk是一种样式扫描与处理工具。但其功能却大大强于sed和grep。awk提供了极其强大的功能:它几乎可以完成grep和sed所能完成的全部工作,同时,它还可以可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。实际上,awk 的确拥有自己的语言:awk程序设计语言,awk的三位创建者已将它正式定义为:样式扫描和处理语言。 为什么使用awk? 即使如此,你也许仍然会问,我为什么要使用awk? 使用awk的第一个理由是基于文本的样式扫描和处理是我们经常做的工作,awk所做的工作有些象数据库,但与数据库不同的是,它处理的是文本文件,这些文件没有专门的存储格式,普通的人们就能编辑、阅读、理解和处理它们。而数据库文件往往具有特殊的存储格式,这使得它们必须用数据库处理程序来处理它们。既然这种类似于数据库的处理工作我们经常会遇到,我们就应当找到处理它们的简便易行的方法,UNIX有很多这方面的工具,例如sed 、grep、sort以及find等等,awk是其中十分优秀的一种。 使用awk的第二个理由是awk是一个简单的工具,当然这是相对于其强大的功能来说的。的确,UNIX有许多优秀的工具,例如UNIX天然的开发工具C语言及其延续C++就非常的优秀。但相对于它们来说,awk完成同样的功能要方便和简捷得多。这首先是因为awk提供了适应多种需要的解决方案:从解决简单问题的awk命令行到复杂而精巧的awk程序设计语言,这样做的好处是,你可以不必用复杂的方法去解决本来很简单的问题。例如,你可以用一个命令行解决简单的问题,而C不行,即使一个再简单的程序,C语言也必须经过编写、编译的全过程。其次,awk本身是解释执行的,这就使得awk程序不必经过编译的过程,同时,这也使得它与shell script程序能够很好的契合。最后,awk本身较C语言简单,虽然awk吸收了C语言很多优秀的成分,熟悉C语言会对学习awk有很大的帮助,但awk 本身不须要会使用C语言——一种功能强大但需要大量时间学习才能掌握其技巧的开发工具。 使用awk的第三个理由是awk是一个容易获得的工具。与C和C++语言不同,awk只有一个文件(/bin/awk),而且几乎每个版本的UNIX都提供各自版本的awk,你完全不必费心去想如何获得awk。但C语言却不是这样,虽然C语言是UNIX天然的开发工具,但这个开发工具却是单独发行的,换言之,你必须为你的UNIX版本的C语言开发工具单独付费(当然使用D版者除外),获得并安装它,然后你才可以使用它。

常用shell脚本

如何用脚本实现分割文件 #!/bin/bash if [ $# -ne 2 ]; then echo 'Usage: split file size(in bytes)' exit fi file=$1 size=$2 if [ ! -f $file ]; then echo "$file doesn't exist" exit fi #TODO: test if $size is a valid integer filesize=`/bin/ls -l $file | awk '{print $5}'` echo filesize: $filesize let pieces=$filesize/$size let remain=$filesize-$pieces*$size if [ $remain -gt 0 ]; then let pieces=$pieces+1 fi echo pieces: $pieces i=0 while [ $i -lt $pieces ]; do echo split: $file.$i: dd if=$file of=$file.$i bs=$size count=1 skip=$i let i=$i+1 done echo "#!/bin/bash" >; merge echo "i=0" >;>; merge echo "while [ $i -lt $pieces ];" >;>; merge echo "do" >;>; merge echo " echo merge: $file.$i" >;>; merge echo " if [ ! -f $file.$i ]; then" >;>; merge echo " echo merge: $file.$i missed" >;>; merge

ls -l命令详解

有几个字段老是记不住,就记载这里吧 ls -l 列表信息详解 我们平时用ls -l 命令查看一个目录下的文件和子目录的详悉信息时,会得到一个详细的文件和目录名列表.这个列表包含了文件的属性,所属用户,所属组,创建时间,文件大小等等信息.这些信息到底是什么意思呢?有很多初学者对这些不太了解,因此想详悉讲解一下用ls -l命令得到的文件列表每一个字段的意思 以笔者电脑的/root目录为例: [root@gucuiwen root]# ll 总用量 4055 -rw-r--r-- 1 root root 1581 11月 24 18:14 anaconda-ks.cfg drwxr-xr-x 2 root root 208 12月 1 13:50 babylinux -rw-r--r-- 1 root root 1474560 11月 25 15:02 babylinux.img -rw-r--r-- 1 root root 26829 11月 25 15:10 babylinux.png lrwxrwxrwx 1 root root 9 1月 4 11:06 disk1.link.png -> disk1.png -rw-r--r-- 1 root root 3209 11月 26 12:07 disk1.png -rw-r--r-- 1 root root 692 11月 26 13:16 disk2.png -rw-r--r-- 1 root root 718 11月 26 13:30 disk3.png drwx------ 8 root root 392 1月 4 08:40 evolution -rwxr-xr-x 1 root root 13695 11月 30 16:51 fangkuai.sh drwxr-xr-x 2 root root 208 12月 28 12:06 FreeBSD -rw-r--r-- 1 root root 2315 11月 25 17:19 getMBR.png brw-r----- 1 root root 3, 1 1月 4 11:06 hda1 drwxr-xr-x 2 root root 296 12月 31 11:53 htmls -rw-r--r-- 1 root root 21369 11月 24 18:12 install.log -rw-r--r-- 1 root root 3024 11月 24 18:12 install.log.syslog -rw-r--r-- 1 root root 293 1月 4 10:51 ls.txt -rw-r--r-- 1 root root 2237702 11月 25 15:09 magick.miff -rw-r--r-- 1 root root 13493 11月 25 17:31 mbr1.png -rw-r--r-- 1 root root 8123 11月 25 17:42 mbr2.png -rw-r--r-- 1 root root 512 11月 30 16:10 mbr.dat -rw-r--r-- 1 root root 64512 11月 26 15:33 partition.doc -rw-r--r-- 1 root root 49887 11月 26 15:32 partition.sxw -rw-r--r-- 1 root root 1541 12月 18 13:14 passwd -rw-r--r-- 1 root root 46320 11月 25 17:28 Screenshot-1.png -rw-r--r-- 1 root root 44145 11月 25 17:32 Screenshot-2.png -rw-r--r-- 1 root root 43732 11月 25 17:13 Screenshot.png drwxr-xr-x 3 root root 72 1月 4 10:49 test -rw-r--r-- 1 root root 0 12月 18 10:44 tset crw-r----- 1 root root 4, 65 1月 4 11:08 ttyS1

LINUX awk用法

AWK 尹会生 --2010.9.6注:本文档中的代码和图片均来自《sed与awk(第二版)》

一 编写awk脚本 HELLO,WORLD $ echo 'this line of data is ignored' > test $ awk '{ print "Hello, world" }' test Hello, world test文件只包含一行,因此,print操作只执行一次。 $ cat test2 Hello, world $ awk '{ print }' test2 Hello, world print语句没有参数,只简单输出每个输入行。 $ awk ‘BEGIN {print “hello,World”}’ Hello,World

BEGIN模式不需要等待输入,它在第一个输入行读入之前执行。 awk程序设计模型 awk程序由所谓的主输入(main input)循环组成。一个循环称作一个例程。awk允许你编写两个特殊的例程,他们在任何输入被读取前和所有输入都被读取后执行。他们是与BEGIN和END规则相关的过程。BEGIN和END过程是可选的。 模式匹配 src1.awk # test for integer, string or empty line. /[0-9]+/ { print "That is an integer" } /[A-Za-z]+/ { print "This is a string" } /^$/ { print "This is a blank line." }

一个特殊的例子: $ awk -f awkscr 4T That is an integer This is a string 一行可以匹配一条或多条规则 程序脚本的注释 # 以#号开始的一行 记录和字段 awk假设它的输入是有结构的,而不是一串无规则的字符。默认它将每个输入行作为一条记录,而将由空格或制表符分隔的单词作为字段。连续的多个空格和/或制表符被作为一个分隔符。 John Robinson 666-555-1111 字段的引用和分离 awk允许使用字段操作符$来指定字段。$后面可以跟着一个数字或者一个变量。$1表示第一个字段,$2表示第二个字段,$0表示整个输入记录。 $ awk '{ print $2, $1, $3 }' names Robinson John 666-555-1111

Linux常用的系统监控shell脚本

https://www.360docs.net/doc/dc15591823.html,下面是我常用的几个Linux系统监控的脚本,大家可以根据自己的情况在进行修改,希望能给大家一点帮助。 1、查看主机网卡流量 1.#!/bin/bash 2. 3.#network 4. 5.#Mike.Xu 6. 7.while : ; do 8. 9.time=’date +%m”-”%d” “%k”:”%M’ 10. 11.day=’date +%m”-”%d’ 12. 13.rx_before=’ifconfig eth0|sed -n “8″p|awk ‘{print $2}’|cut -c7-’ 14. 15.tx_before=’ifconfig eth0|sed -n “8″p|awk ‘{print $6}’|cut -c7-’ 16. 17.sleep 2 18. 19.rx_after=’ifconfig eth0|sed -n “8″p|awk ‘{print $2}’|cut -c7-’ 20. 21.tx_after=’ifconfig eth0|sed -n “8″p|awk ‘{print $6}’|cut -c7-’ 22. 23.rx_result=$[(rx_after-rx_before)/256] 24. 25.tx_result=$[(tx_after-tx_before)/256] 26. 27.echo “$time Now_In_Speed: “$rx_result”kbps Now_OUt_Speed: “$tx_result”kbps” 28. 29.sleep 2 30. 31.done 2、系统状况监控 1.#!/bin/sh 2. 3.#systemstat.sh

Linux awk命令详解

Linux awk命令详解 AWK介绍 0.awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk。 1.awk语言的最基本功能是在文件或字符串中基于指定规则来分解抽取信息,也可以基于指定的规则来输出数据。完整的awk脚本通常用来格式化文本文件中的信息。 2.三种方式调用awk 1) awk [opion] 'awk_script' input_file1 [input_file2 ...] awk的常用选项option有; ① -F fs : 使用fs作为输入记录的字段分隔符,如果省略该选项,awk使用环境变量IFS的值 ② -f filename : 从文件filename中读取awk_script ③ -v var=value : 为awk_script设置变量 2) 将awk_script放入脚本文件并以#!/bin/awk -f 作为首行,给予该脚本可执行权限,然后在shell下通过键入该脚本的脚本名调用之。 3) 将所有的awk_script插入一个单独脚本文件,然后调用: awk -f awk脚本文件input_file(s) 3. awk的运行过程 1) awk_script的组成: ① awk_script可以由一条或多条awk_cmd组成,两条awk_cmd之间一般以NEWLINE分隔 ② awk_cmd由两部分组成: awk_pattern { actions } ③ awk_script可以被分成多行书写,必须确保整个awk_script被单引号括起来。 2) awk命令的一般形式: awk ' BEGIN { actions } awk_pattern1 { actions } ............ awk_patternN { actions } END { actions } ' inputfile 其中BEGIN { actions } 和END { actions } 是可选的。 3) awk的运行过程: ①如果BEGIN 区块存在,awk执行它指定的actions。 ② awk从输入文件中读取一行,称为一条输入记录。(如果输入文件省略,将从标准输入读取) ③awk将读入的记录分割成字段,将第1个字段放入变量$1中,第2个字段放入$2,以此类推。$0表示整条记录。字段分隔符使用shell环境变量IFS或由参数指定。 ④把当前输入记录依次与每一个awk_cmd中awk_pattern比较,看是否匹配,如果相匹配,就执行对应的actions。如果不匹配,就跳过对应的actions,直到比较完所有的awk_cmd。 ⑤当一条输入记录比较了所有的awk_cmd后,awk读取输入的下一行,继续重复步骤③和④,这个过程一

Linux awk命令使用详解

Linux awk命令使用详解 简单介绍一下,awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大,这是我们玩linux的必备基本功,若要对其身世有更详尽的了解,自行搜索即可。对于工具的知识,笔者尽量将每个知识点的简要说明,并给出实例。 简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。 用法: awk [options] 'scripts' file1,file2... awk [options] 'pattern {action}' file1,file2... options是awk的支持的选项,譬如-F -v等; scripts是其处理脚本,包含模式pattern和动作action(模式和动作的关系一般为,模式负责确定有效字段,动作负责对其处理) 一、print的简单使用

创建一个简单的测试文件如下: [root@mos download]# cat demo.txt Welcome to mos blog. This is a test file. 例:打印整行: $0 [root@mos download]# awk '{print $0}' demo.txt Welcome to mos blog. This is a test file. 例:打印每行的最后一个字段: $NF [root@mos download]# awk '{print $NF}' demo.txt blog. file. 例:打印第二个字段: $2 [root@mos download]# awk '{print $2}' demo.txt to is 例:打印每行的倒数第二个字段,并在其后打印OK

使用Shell脚本对Linux系统和进程资源进行监控

使用Shell脚本对Linux系统和进程资源进行监控 发表于2012-06-26 08:58| 6963次阅读| 来源IBM开发者社区| 1条评论| 作者于东海,宋波,池辰ShellLinux脚本 摘要:Shell语言对于接触Linux的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口。本文我们以Bash做为实例总结了使用Shell对系统和进程资源进行监控的一些内容,希望对您能有帮助。 Shell语言对于接触Linux的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。它没有一般编程语言的“编译- 链接- 运行”过程。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。当然,Shell功能也是很强大的。Shell有多种类型,其中最常用的几种是Bourne shell(sh)、C shell(csh)和Korn shell(ksh)三种。shell各有优缺点,Linux操作系统缺省的shell一般是Bourne Again shell,它是Bourne shell的扩展,简称Bash。Bash的命令语法是Bourne shell命令语法的超集,并且在Bourne shell的基础上增加、增强了很多特性。在这里,我们以Bash做为实例总结了使用Shell对系统和进程资源进行监控的一些内容,希望对您能有帮助。 检查进程是否存在 在对进程进行监控时,我们一般需要得到该进程的ID,进程ID是进程的唯一标识,但是有时可能在服务器上不同用户下运行着多个相同进程名的进程,下面的函数GetPID给出了获取指定用户下指定进程名的进程ID功能(目前只考虑这个用户下启动一个此进程名的进程),它有两个参数为用户名和进程名,它首先使用ps查找进程信息,同时通过grep过滤出需要的进程,最后通过sed和awk查找需要进程的ID值(此函数可根据实际情况修改,比如需要过滤其它信息等)。

linux下cat命令详解1

cat命令的用途是连接文件或标准输入并打印。这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用 1.命令格式: cat [选项] [文件]... 2.命令功能: cat主要有三大功能: 1.一次显示整个文件:cat filename 2.从键盘创建一个文件:cat > filename 只能创建新文件,不能编辑已有文件. 3.将几个文件合并为一个文件:cat file1 file2 > file 3.命令参数: -A, --show-all 等价于-vET -b, --number-nonblank 对非空输出行编号 -e 等价于-vE -E, --show-ends 在每行结束处显示$ -n, --number 对输出的所有行编号,由1开始对所有输出的行数编号 -s, --squeeze-blank 有连续两行以上的空白行,就代换为一行的空白行 -t 与-vT 等价 -T, --show-tabs 将跳格字符显示为^I -u (被忽略) -v, --show-nonprinting 使用^ 和M- 引用,除了LFD 和TAB 之外 4.使用实例: 实例一:把log2012.log 的文件内容加上行号后输入log2013.log 这个文件里 命令: cat -n log2012.log log2013.log 输出: 代码如下: [root@localhost test]# cat log2012.log 2012-01 2012-02 ======[root@localhost test]# cat log2013.log 2013-01 2013-02

Linux下使用awk批量删除共享内存

Linux下使用awk批量删除共享内存 1.awk简介 awk 是一个强大的文本分析工具。sed 常常用于一整个行的处理,而awk 则倾向于以空格和tab键为默认分隔符将每行切片成一个个域(也就是一列)来处理。Awk适用于小型的数据数据处理 awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是AWK 的GNU 版本。 2. awk语法格式 a wk 'pattern1 {action1} pattern2 {action2} ...' filename awk 后面接两个单引号并加上大括号{} 来对匹配模式的数据进行处理。awk 可以处理后面指定的文件,也可以通过管道命令”|”读取来自前个命令的标准输出。 3.工作流程 awk工作流程是这样的:读入有'\n'换行符分割的多条记录,然后将每一条记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是空格键和tab键。 以last命令结合awk来演示awk一个简单的筛选输出。 们用last 可以将登陆者的数据取出来,结果如下所示: [root@lvlv]# last -n 4 root pts/1 192.168.1.100 Tue Feb 10 11:21 still logged in root pts/1 192.168.1.100 Tue Feb 10 00:46 - 02:28 (01:41) root pts/1 192.168.1.100 Mon Feb 9 11:41 - 18:30 (06:48) dmtsai pts/1 192.168.1.100 Mon Feb 9 11:41 - 11:41 (00:00) 若我想要取出帐号与登陆者的IP ,且帐号与IP 之间以[tab] 隔开,则会变成这样: [root@lvlv]# last -n 5 | awk '{print $1 "\t" $3}' root 192.168.1.100 root 192.168.1.100 root 192.168.1.100 dmtsai 192.168.1.100 4.利用awk批量删除共享内存 首先利用“ipcs –m”查看共享内存信息,然后再利用“ipcrm -m shmid”删除共享内存。利用awk进行批量删除共享内存的shell脚本如下: ipcs -m|awk '$2~/[0-9]+/{print $2}'| while read s do ipcrm -m $s done 结合上面对awk的介绍,应该不难看懂脚本。awk '$2~/[0-9]+/{print $2}'表示打印出只含阿拉伯数字的每行的第二列,即共享内存标识。awk中正则表达式由两个斜杠包围,即/REG/,

AIX常用命令

AIX常用命令 目录操作 命令名功能描述使用举例 mkdir 创建一个目录mkdir dirname rmdir 删除一个目录rmdir dirname mvdir 移动或重命名一个目录mvdir dir1 dir2 cd 改变当前目录cd dirname pwd 显示当前目录的路径名pwd ls 显示当前目录的内容ls -la dircmp 比较两个目录的内容dircmp dir1 dir2 文件操作 命令名功能描述使用举例 cat 显示或连接文件cat filename pg 分页格式化显示文件内容pg filename more 分屏显示文件内容more filename od 显示非文本文件的内容od -c filename cp 复制文件或目录cp file1 file2 rm 删除文件或目录rm filename mv 改变文件名或所在目录mv file1 file2 ln 联接文件ln -s file1 file2

find 使用匹配表达式查找文件find . -name "*.c" -print file 显示文件类型file filename 选择操作 命令名功能描述使用举例 head 显示文件的最初几行head -20 filename tail 显示文件的最后几行tail -15 filename cut 显示文件每行中的某些域cut -f1,7 -d: /etc/passwd colrm 从标准输入中删除若干列colrm 8 20 file2 paste 横向连接文件paste file1 file2 diff 比较并显示两个文件的差异diff file1 file2 sed 非交互方式流编辑器sed "s/red/green/g" filename grep 在文件中按模式查找grep "^[a-zA-Z]" filename awk 在文件中查找并处理模式awk '{print $1 $1}' filename sort 排序或归并文件sort -d -f -u file1 uniq 去掉文件中的重复行uniq file1 file2 comm 显示两有序文件的公共和非公共行comm file1 file2 wc 统计文件的字符数、词数和行数wc filename nl 给文件加上行号nl file1 >file2 安全操作 命令名功能描述使用举例

Shell中的grep、awk和sed的常用命令和语法

常用的grep选项有: -c 只输出匹配行的计数。 -i 不区分大小写(只适用于单字符)。 -h 查询多文件时不显示文件名。 -l 查询多文件时只输出包含匹配字符的文件名。 -n 显示匹配行及行号。 -s 不显示不存在或无匹配文本的错误信息。 -v 显示不包含匹配文本的所有行。 $ grep“sort”*.doc ( #在当前目录下所有. d o c文件中查找字符串”s o r t”) $ grep “sort it” * (#或在所有文件中查询单词”sort it”) 2.行匹配 $ grep -c “48″ data.f $ 4 (#g r e p返回数字4,意义是有4行包含字符串”4 8″。) $ grep “48″ data.f (#显示包含”4 8″字符串的4行文本) 7. 查询空行,查询以某个条件开头或者结尾的行。 结合使用^和$可查询空行。使用- n参数显示实际行数 [root@mypc oid2000]# grep -n “^$” 111.txt (返回结果 2: #说明第二行是空行) [root@mypc oid2000]# grep -n “^abc” 111.txt (#查询以abc开头的行) [root@mypc oid2000]# grep -n “abc$” 111.txt (#查询以abc结尾的行) 8. 匹配特殊字符,查询有特殊含义的字符,诸如$ . ‘ ” * [] ^ | \ + ? ,必须在特定字符前加\。 [root@mypc oid2000]# grep “\.” 111.txt (#在111.txt中查询包含”.”的所有行) [root@mypc oid2000]# grep “my\.conf” 111.txt (#查询有文件名my. c o n f的行) 9. 目录的查询 [root@mypc oid2000]# ls -l |grep “^d” (#如果要查询目录列表中的目录) [root@mypc oid2000]# ls -l |grep “^d[d]“ (#在一个目录中查询不包含目录的所有文件) [root@mypc]# ls -l |grpe “^d…..x..x” (#查询其他用户和用户组成员有可执行权限的目录集合) Awk的常用命令语法 awk [-F filed-s eparator] “commands” input-file(s) [ - F域分隔符]是可选的,a w k使用空格作为缺省的域分隔符 1.2保存a w k输出 $ awk ‘{print $0}’ input-files > out-files (#重定向保存输出) $ awk ‘{print $0}’ input-files | tee out-files (#使用t e e命令,输出到文件的同时输出到屏幕) 1.3 常用的awk命令举例 [root@mypc /]# awk ‘$0 ~ /user/’ /etc/passwd (#如果某域含有user就将该行打

awk命令详解

常用awk命令(转)

awk 用法:awk ' pattern {action} ' 变量名含义 ARGC 命令行变元个数 ARGV 命令行变元数组 FILENAME 当前输入文件名 FNR 当前文件中的记录号 FS 输入域分隔符,默认为一个空格 RS 输入记录分隔符 NF 当前记录里域个数 NR 到目前为止记录数 OFS 输出域分隔符 ORS 输出记录分隔符 1、awk '/101/' file 显示文件file中包含101的匹配行。 awk '/101/,/105/' file awk '$1 == 5' file awk '$1 == "CT"' file 注意必须带双引号 awk '$1 * $2 >100 ' file awk '$2 >5 && $2<=15' file 2、awk '{print NR,NF,$1,$NF,}' file 显示文件file的当前记录号、域数和每一行的第一个和最后一个域。 awk '/101/ {print $1,$2 + 10}' file 显示文件file的匹配行的第一、二个域加10。 awk '/101/ {print $1$2}' file awk '/101/ {print $1 $2}' file 显示文件file的匹配行的第一、二个域,但显示时域中间没有分隔符。 3、df | awk '$4>1000000 ' 通过管道符获得输入,如:显示第4个域满足条件的行。 4、awk -F "|" '{print $1}' file 按照新的分隔符“|”进行操作。 awk 'BEGIN { FS="[: \t|]" } {print $1,$2,$3}' file 通过设置输入分隔符(FS="[: \t|]")修改输入

linux 性能跟踪脚本

#!/bin/bash #~~~~~~~~~~~~~~~~~~~~定期显示系统的资源状态~~~~~~~~~~~~~~~~~~~ #此脚本放入crontab文件中,定期执行获得长期的跟踪结果 disk_perf() { #~~~~~~~~~~~~~~关注硬盘增长状况(使用时需明确监测的磁盘)~~~~~ #disk=sd,关注需要关注的磁盘,grep '/$' 以上排除网络存储,关注根目录的状态, #如果磁盘占用的空间大于90% 则将根目录下各文件夹的大小放入disk_space.log中 disk=sdb sd=$(df -h |grep "/$" | grep "$disk" |awk '{print $3,$5}') va=$(df -h |grep "/$" | grep "$disk" |awk '{print $5}'|cut -c 1-2) if [ $va -gt 90 ]; then echo -e "$tim" >> $Dirpath/disk_space.log; du -sh /* >> $Dirpath/disk_space.log; fi echo "$tim $sd" >> $Dirpath/disk.log } create() { mkdir /usr/local/perf echo -e "日期\t用户CPU占用\t系统CPU占用" > /usr/local/perf/cpu.log echo -e "Date\tUsed\t free\t cached" > /usr/local/perf/Mem.log echo -e "日期\t已使用的空间\t 使用的百分比" > /usr/local/perf/disk.log echo -e "日期\tvar目录的大小" > /usr/local/perf/var.log echo -e "日期\t\t\t负载\t1分钟\t5分钟\t15分钟" > /usr/local/perf/cpu_ave.log } view() { #~~~~~~~~~~~~~~~~~~~~关注CPU的情况(用户使用+系统使用)~~~~~~~ #如果CPU负载5分钟内大于3说明应关注负载的问题,将top命令的结果放到top.log 中 Dirpath="/usr/local/perf" tim=$(date +%Y_%m_%d--%H:%M:%S) info=$(top -bn 1 |grep 'Cpu' |awk '{print $2,$3,$6}') info2=$(uptime |awk '{print $7,$8,$9,$10}') info3=$(uptime |awk '{print $10}') if [ `echo "$info3 > 3" | bc` -eq 1 ]; then echo -e "$tim" >> $Dirpath/top.log; top -bn 1 >> $Dirpath/top.log; fi echo -e "$tim\t$info2" >> $Dirpath/cpu_ave.log

linux中grep命令详解

grep用法详解:grep与正则表达式 首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同! 正则表达式只是一种表示法,只要工具支持这种表示法,那么该工具就可以处理正则表达式的字符串。vi grep ,awk ,sed 等都支持正则表达式. 1基础正则表达式 grep 工具,以前介绍过。 grep -[acinv] '搜索内容串' filename -a 以文本文件方式搜索 -c 计算找到的符合行的次数 -i 忽略大小写 -n 顺便输出行号 -v 反向选择,即找没有搜索字符串的行 其中搜索串可以是正则表达式! 1 搜索有the的行,并输出行号 $grep -n 'the' regular_express.txt 搜索没有the的行,并输出行号 $grep -nv 'the' regular_express.txt

2 利用[]搜索集合字符 [] 表示其中的某一个字符,例如[ade] 表示a或d或e woody@xiaoc:~/tmp$ grep -n 't[ae]st' regular_express.txt 8:I can't finish the test. 9:Oh! the soup tast e good! 可以用^符号做[]内的前缀,表示除[]内的字符之外的字符。 比如搜索oo前没有g的字符串所在的行. 使用 '[^g]oo' 作搜索字符串 woody@xiaoc:~/tmp$ grep -n '[^g]oo' regular_express.txt 2:apple is my favorite foo d. 3:Foo tball game is not use feet only. 18:google is the best too ls for search keyword. 19:go ooo oogle yes! [] 内可以用范围表示,比如[a-z] 表示小写字母,[0-9] 表示0~9的数字, [A-Z] 则是大写字母们。[a-zA-Z0-9]表示所有数字与英文字符。当然也可以配合^来排除字符。 搜索包含数字的行 woody@xiaoc:~/tmp$ grep -n '[0-9]' regular_express.txt 5:However ,this dress is about $ 3183 dollars.

LinuxShell脚本编程实例

1、打印位置变量的个数和位置变量的内容 #! /bin/sh echo "Current command is $0" echo "The first parameter is $1" echo "The second parameter is $2" echo "The third parameter is $3" echo "Total of parameters if $#" echo "Current PID is $$" 2、循环打印“I love linux”3次 #!/bin/bash times=0 until [ "$times" = 3 ]; do echo "I love linux." sleep 2 times=`expr $times + 1` done 3、完成菜单程序的功能: 1)列出当前的文件 2)更改路径 3)编辑文件 4)删除文件 #!/bin/bash # menu shell script. until echo "List Directory..........1" echo "Change Directory........2" echo "Edit File...............3" echo "Remove File.............4" echo "Exit Menu...............5" read choice test $choice = 5 do case $choice in 1) ls;; 2) echo "enter target directory:" read dir cd $dir ;; 3) echo "enter file name:" read file vi $file

相关文档
最新文档