加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

awk和sed

发布时间:2020-12-14 01:07:36 所属栏目:Linux 来源:网络整理
导读:awk 替换列(删除) 1 如果11列是0,那么替换为空;如果12列是0,那么替换为空 2 不要用,要用 awk ‘BEGIN{FS=OFS=","}{if ($11==0) $11=""}{if ($12==0) $12=""}1‘ important_tg_list.csv important_tg_list1.csv 统计列数 awk -F"," ‘{print NF}‘ import

awk

替换列(删除)

1 如果11列是0,那么替换为空;如果12列是0,那么替换为空

2 不要用>,要用>>

awk ‘BEGIN{FS=OFS=","}{if ($11==0) $11=""}{if ($12==0) $12=""}1‘ important_tg_list.csv >> important_tg_list1.csv

统计列数

awk -F"," ‘{print NF}‘ important_tg_list.csv |sort -n|uniq

常用

#默认以空格分割,那整个文件就只有一列,打印最后一列结果如下
[[email?protected] ~]# cat /etc/passwd|awk {print $1}|tail -1
tcpdump:x:72:72::/:/sbin/nologin
#用冒号分割打印第一列用户名
[[email?protected] ~]# cat /etc/passwd|awk -F: {print $1}|tail -1
tcpdump
#从ifconfig结果中匹配出Ip地址,思路:先grep匹配所在行,再用awk列切割
#匹配行
[[email?protected] ~]# ifconfig|grep "Bcast"
          inet addr:192.168.15.172  Bcast:192.168.15.255  Mask:255.255.255.0
#切割列同时将多余字符替换为空
[[email?protected] ~]# ifconfig|grep "Bcast"|awk {print $2}|sed s/addr://g
192.168.15.172
#也可以进行2次awk切割
[[email?protected] ~]# ifconfig|grep "Bcast"|awk {print $2}|awk -F: {print $2}
192.168.15.172
[[email?protected] ~]# ifconfig|grep "Bcast"|awk {print $2}|awk -F: {print "ip:"$2"-"$1}  
ip:192.168.15.172-addr
#打印文件的第1,3行用分号间隔条件
[[email?protected] sh]# cat test.txt|awk NR==1;NR==3 {print $0} 
www.jf.com aaa
www.jf.com ccc
#打印第3行以后内容
[[email?protected] sh]# cat test.txt|awk NR>=3 {print $0}       
www.jf.com ccc
www.jf.com ddd
www.jf.com eee
#打印符号条件最后一个域(默认空格分割的最后一列)
[[email?protected] sh]# cat test.txt|awk {print $NF} 
aaa
bbb
ccc
#打印倒数第2个域
[[email?protected] sh]# cat test.txt|awk {print $(NF-1)}
www.jf.com
www.jf.com
#查看tcp监听端口的状态
[[email?protected] sh]# netstat -an|awk /^tcp/ {print $NF}
LISTEN
LISTEN             #监听
ESTABLISHED #转发
#扫描文件打印所有字符长度大于80的行的行号NR
[[email?protected] sh]# cat test.txt|awk length($0)>80 {print NR}

?SED

i参数表示修改,不加i参数只能在屏幕上输出预览修改都的效果并不会修改源文件,加i参数就没有输出直接改源文件
    a参数表示在查找对象下一行添加内容,不带空格a后面直接跟添加内容
    i 单引号内i参数表示在上一行插入

#n/p参数搭配使用查找特定对象
[[email?protected] ~]# df -h|sed -n /sda1/p
/dev/sda1       194M   30M  155M  17% /boot
#预览添加内容如给脚本加个注释语句,注意a后面直接跟内容
[[email?protected] sh]# sed /192.168.15.2/a#this is test ip_list
192.168.15.1 /var/www/html1 /data/www/html1
192.168.15.2 /var/www/html2 /data/www/html2
#this is test
#上一行插入
[[email?protected] sh]# sed /192.168.15.2/i#this is test2 ip_list   
192.168.15.1 /var/www/html1 /data/www/html1
#this is test2
192.168.15.2 /var/www/html2 /data/www/html2
#结合命令打印1到3行,用逗号间隔
[[email?protected] ~]# df -h|sed -n 1,3p
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        77G  3.5G   70G   5% /
tmpfs           491M     0  491M   0% /dev/shm
#结合命令打印1和3行,用分号间隔
[[email?protected] ~]# df -h|sed -n 1p;3p
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           491M     0  491M   0% /dev/shm
#查找以/结尾的行打印出来
[[email?protected] ~]# df -h|sed -n //$/p
/dev/sda2        77G  3.5G   70G   5% /
#多个替换可以一起书写如将%及G替换为空,替换字段用分号间隔
[[email?protected] ~]# df -h|sed -n //$/p|sed s/G//g;s/%//g
/dev/sda2        77  3.5   70   5 /
[[email?protected] ~]# df -h|sed -n //$/p|sed -e s/G//g -es/%//g
/dev/sda2        77  3.5   70   5 /
#在每行的末尾或者开头追加字段,&表示追加,注意追加字段的空格处理
[[email?protected] sh]# sed s/^/&www.jf.com /g test.txt 
www.jf.com aaa
www.jf.com bbb
www.jf.com ccc
[[email?protected] sh]# sed s/$/& www.jf.com/g test.txt   
aaa www.jf.com
bbb www.jf.com
ccc www.jf.com
------------------------------------------------------------------------------------------

#预览替换后全部文件
sed s/This/aaa/ test.txt
#-n选项和p命令一起使用表示只打印那些发生替换的行
sed  -n s/This/aaa/p test.txt
#直接编辑文件选项-i,会匹配test.txt文件中每一行的第一个This替换为this
 sed -i s/This/this/ test.txt
#全面替换标记g,使用后缀/g标记会替换每一行中的所有匹配
sed s/this/This/g test.txt
#当需要从第N处匹配开始替换时,可以使用/Ng
echo sksksksksksk | sed s/sk/SK/2g
skSKSKSKSKSK
echo sksksksksksk | sed s/sk/SK/4g
skskskSKSKSK
#以上命令中字符 / 在sed中作为定界符使用,也可以使用任意的定界符
echo sksksksksksk | sed s:sk:SK:4g
echo sksksksksksk | sed s|sk|SK|4g
#定界符出现在样式内部时,需要进行转义
 echo /usr/local/bin | sed s//usr/local/bin//USR/LOCAL/BIN/g
/USR/LOCAL/BIN
#删除空白行d
 sed /^$/d test.txt
#删除文件指定第2行(编辑文件需要和参数i配合使用)
sed 2d test.txt
#删除文件的第2行到末尾所有行
sed 2,$d test.txt
#删除文件最后一行
sed $d test.txt
#删除文件中所有以my开头的行
sed /^my/d test.txt
#打印从第5行开始到第一个包含以this开始的行之间的所有行
 sed -n 5,/^this/p test.txt
#-e选项允许在同一行里执行多条命令,第一条命令删除1至5行,第二条命令用MY替换my。命令的执行顺序对结果有影响。如果两个命令都是替换命令,那么第一个命令将影响第二个命令的结果
sed -e 1,5d -e s/my/MY/ test.txt
#写入命令w,在test.txt中所有包含my的行都被写入test2.txt里
sed -n /my/w test2.txt test.txt

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读