文本处理命令

一、cut显示切割的行数据

不想全看,只想看其中几列!
f :显示切割的行数据
s :不显示没有分隔符的行
d :自定义分隔符

1、-d ’ '给出分隔符(空格),-f1显示第一列

cut -d ' ' -f1 grep.txt 

2、如果一行数据只有一列(脏数据),-f2的时候脏数据也会被显示出来,去除脏数据 -s:

cut  -d'  ' -f2 -s grep.txt

3、只显示第一列和第三列:

cut -d'  ' -f1,3 -s grep.txt

4、显示第1,2,3列:

cut -d' ' -f1-3 -s grep.txt

二、sort排序,有字典序和数值序,默认字典序,整行比较

-n 按数值排序
-r 倒序
-t自定义分隔符
-k选择排序列
-u合并相同行
-f忽略大小写
1、以空格切割,排第二列

sort  -t' ' -k2 sort.txt 

2、空格切割,排第二列,以数值排

sort -t'  ' -k2   -n  sort.txt

三、wc查看多少行

1、wc -l sort.txt,得到的结果是:3 sort.txt
2、cat sort.txt | wc -l得到的结果是:3

四、Sed行编辑器

-n: 静默模式,不再默认显示模式空间中的内容
-i: 直接修改原文件
-e SCRIPT -e SCRIPT:可以同时执行多个脚本
-f /PATH/TO/SED_SCRIPT
-r: 表示使用扩展正则表达式
d: 删除符合条件的行;
p: 显示符合条件的行;
a \string: 在指定的行后面追加新行,内容为string
\n:可以用于换行
i \string: 在指定的行前面添加新行,内容为string
r FILE: 将指定的文件的内容添加至符合条件的行处
w FILE: 将地址指定的范围内的行另存至指定的文件中;
s/pattern/string/修饰符: 查找并替换,默认只替换每行中第一次被模式匹配到的字符串
g: 行内全局替换
i: 忽略字符大小写
s///: s###, s@@@
(), \1, \2

1、删除第一行,但是原始文件还在,没改变

sed "1d"  sort.txt

2、想改动源文件

sed -i "1d" sort.txt

3、在第一行下面追加一行,内容是hello worlld

sed "1a\hello world" sort.txt

4、打印只包含a的行, /a/ 表示查找,p表示打印

sed   -n "/a/p" sort.txt

5、支持正则,显示带有数字的行

sed -n "/[0-9]/p"  sort.txt

6、(查找并替换)查找文件内每一行的数字0-6,并把第一个数字替换成6

sed "s/[0-6]/5/"  inittab

7、把引用的相同部分用(***)和\1引用

sed  "s/\(id:\)[0-6]\(:initdef\)/\15\2/"  inittab

五、awk 是一个强大的文本分析工具

awk -F ‘{pattern + action}’ {filenames}
支持自定义分隔符
支持正则表达式匹配
支持自定义变量,数组 a[1] a[tom] map(key)
支持内置变量

  • ARGC 命令行参数个数
  • ARGV 命令行参数排列
  • ENVIRON 支持队列中系统环境变量的使用
  • FILENAME awk浏览的文件名
  • FNR 浏览文件的记录数
  • FS 设置输入域分隔符,等价于命令行 -F选项
  • NF 浏览记录的域的个数
  • NR 已读的记录数
  • OFS 输出域分隔符
  • ORS 输出记录分隔符
  • RS 控制记录分隔符
    支持函数
  • print、split、substr、sub、gsub
    支持流程控制语句,类C语言
  • if、while、do/while、for、break、continue
    1、以冒号为分隔符处理每一行,处理逻辑必须用 ‘’ 将其作为参数传到方法体中,打印
awk -F ' : '  '{print  $1}'  passwd

2、BEGIN和END方法单独调用,读取每一行被冒号“ :”分隔,打印出第一列和第七列

awk  -F':'  'BEGIN{print "name\tshell"}  {print $1  "\t"  $7}  END{print "welcome ......"}'

3、匿名函数可以有多个,比如:打印先读取第一行执行第一个匿名函数,在执行第二个匿名函数。接着读取第二行继续调用执行语句

awk -F ':'  'BEGIN{print  "name\tshell"}  {print  $1  "\t"  $7 } {print  $0}  END{print "welcome ......"}'  passwd

4、搜索打印passed文件中有关键字:root的行

awk '/root/  {print $0}'  passwd  

5、打印出文件中有0-7的行

awk  '/[0-7]/   {print $0}'  passwd

6、打印出每行的行号、列数和完整一行

awk    -F':'  '{print NR  "\t" NF "\t" $0} '	passwd

7、读取awk文件默认制表符分隔每一行,将第三列以中线“-”分隔若==01就把第五列得值相加。在END函数中以增强型for循环用i in来迭代name,i代表数组的key name name[i]代表value

awk '{split($3,date,"-");if(date[2]==01){name[$1]+=$5}}  END{for(i in  name){print  i  "\t"  name[i]}}'  awk.txt

8、根据以上需求,额外的将第二列的角色进行归属、打印

awk '{split($3,date,"-");if(date[2]==01){name[$1]+=$5;if($2=="0"){role[$1]="M"}else{role[$1]="W}}}  END{for(i in  name){print  i  "\t"  name[i]  "\t" role[i]}}'  awk.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值