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
常用
#默认以空格分割,那整个文件就只有一列,打印最后一列结果如下 [root@localhost ~]# cat /etc/passwd|awk '{print $1}'|tail -1 tcpdump:x:72:72::/:/sbin/nologin #用冒号分割打印第一列用户名 [root@localhost ~]# cat /etc/passwd|awk -F: '{print $1}'|tail -1 tcpdump #从ifconfig结果中匹配出Ip地址,思路:先grep匹配所在行,再用awk列切割 #匹配行 [root@localhost ~]# ifconfig|grep "Bcast" inet addr:192.168.15.172 Bcast:192.168.15.255 Mask:255.255.255.0 #切割列同时将多余字符替换为空 [root@localhost ~]# ifconfig|grep "Bcast"|awk '{print $2}'|sed 's/addr://g' 192.168.15.172 #也可以进行2次awk切割 [root@localhost ~]# ifconfig|grep "Bcast"|awk '{print $2}'|awk -F: '{print $2}' 192.168.15.172 [root@localhost ~]# ifconfig|grep "Bcast"|awk '{print $2}'|awk -F: '{print "ip:"$2"-"$1}' ip:192.168.15.172-addr #打印文件的第1,3行用分号间隔条件 [root@localhost sh]# cat test.txt|awk 'NR==1;NR==3 {print $0}' www.jf.com aaa www.jf.com ccc #打印第3行以后内容 [root@localhost sh]# cat test.txt|awk 'NR>=3 {print $0}' www.jf.com ccc www.jf.com ddd www.jf.com eee #打印符号条件最后一个域(默认空格分割的最后一列) [root@localhost sh]# cat test.txt|awk '{print $NF}' aaa bbb ccc #打印倒数第2个域 [root@localhost sh]# cat test.txt|awk '{print $(NF-1)}' www.jf.com www.jf.com #查看tcp监听端口的状态 [root@localhost sh]# netstat -an|awk '/^tcp/ {print $NF}' LISTEN LISTEN #监听 ESTABLISHED #转发 #扫描文件打印所有字符长度大于80的行的行号NR [root@localhost sh]# cat test.txt|awk 'length($0)>80 {print NR}'
扩展
https://juejin.im/post/5d09ebd05188252ea55fe683
SED
i参数表示修改,不加i参数只能在屏幕上输出预览修改都的效果并不会修改源文件,加i参数就没有输出直接改源文件 a参数表示在查找对象下一行添加内容,不带空格a后面直接跟添加内容 i 单引号内i参数表示在上一行插入 #n/p参数搭配使用查找特定对象 [root@localhost ~]# df -h|sed -n '/sda1/p' /dev/sda1 194M 30M 155M 17% /boot #预览添加内容如给脚本加个注释语句,注意a后面直接跟内容 [root@localhost 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 #上一行插入 [root@localhost 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行,用逗号间隔 [root@localhost ~]# 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行,用分号间隔 [root@localhost ~]# df -h|sed -n '1p;3p' Filesystem Size Used Avail Use% Mounted on tmpfs 491M 0 491M 0% /dev/shm #查找以/结尾的行打印出来 [root@localhost ~]# df -h|sed -n '/\/$/p' /dev/sda2 77G 3.5G 70G 5% / #多个替换可以一起书写如将%及G替换为空,替换字段用分号间隔 [root@localhost ~]# df -h|sed -n '/\/$/p'|sed 's/G//g;s/%//g' /dev/sda2 77 3.5 70 5 / [root@localhost ~]# df -h|sed -n '/\/$/p'|sed -e 's/G//g' -e's/%//g' /dev/sda2 77 3.5 70 5 / #在每行的末尾或者开头追加字段,&表示追加,注意追加字段的空格处理 [root@localhost sh]# sed 's/^/&www.jf.com /g' test.txt www.jf.com aaa www.jf.com bbb www.jf.com ccc [root@localhost 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