awk回顾
awk - 简介 Linux 制表好工具
复习一下awk格式
awk [options] 'command' file(s)
这里command
也有自己的格式pattern {awk操作命令}
patter
可以是Regex也可以是逻辑判断式
上一篇有稍微用到UID>100这逻辑判断式;
所以也有常见的==
、!=
、>
、<
等等的逻辑判断符号.
继续玩, 接着着重在Regex逻辑判断上
~
表示匹配後面的Regex
!~
表示不匹配後面的Regex
透过~/RegexPattern/
awk -F ':' '$1~/^r.*/{print $1}' /etc/passwd
# ^是Regex的符号, 用来表示下一个符号一定是搜寻对象的开头
# .代表任意符号
# *则代表前一个符号可以出现任意次数
透过!~/RegexPattern/
awk -F ':' '$1!~/^r.*/{print $1}' /etc/passwd
透过$3==100
做pattern; {print $1,$3}
是awk操作命令
awk -F ':' '$3==100{print $1,$3}' /etc/passwd
awk [options] 'command' file(s)
command可以有BEGIN
与END
; 分别在pattern {awk commands}的之前与之後套用的,
BEGIN
会在读取任何输入行资料之前执行, 哪怕pattern没中半个
END
在awk退出前执行
制作表格,显示/etc/passwd每行的行号, 字段数量, 用户名称
awk -F ':' 'BEGIN{print "Ln WordCnt User"}{print NR, NF, $1}END{print"----"FILENAME"----"}' /etc/passw
结果有出来, 但格式不如预期
这次不自己用空格做编排, 改用\t
水平制表符号(tab)
awk -F ':' 'BEGIN{print "Ln \tWordCnt \tUser"}{print NR "\t" NF "\t" $1}END{print"----"FILENAME"----"}' /etc/passwd
是不是整整齐齐的了
透过BEGIN来设定字串分隔符号
之前都是透过option-F
现在也能透过BEGIN
加上FS
栏位分隔符号做设定
刚刚的例子改成
awk 'BEGIN{FS=":"; print "Ln \tWordCnt \tUser"}{print NR "\t" NF "\t" $1}END{print"----"FILENAME"----"}' /etc/passwd
能达成跟上图一样的字串分隔效果与显示结果
输出也不只是能有空格或tab
能搭配OFS
输出栏位分隔符号, 来做设定
cat grepText.txt; \
awk 'BEGIN{OFS="-"}{print $1,$2,$3}' grepText.txt
love loove live l0ve lOve l@ve lovelove
可以看到本来输出应该是空格的, 但透过OFS
改成-
做拼接
玩个无聊的功能
/etc/passswd的UserName我不想给人看到, 做个遮罩
awk 'BEGIN{FS=":"; print "Ln\tWordCnt\tUId\tUser"}{$3="xxxx"; print NR "\t" NF "\t" $3"\t"$1}END{print"----"FILENAME"----"}' /etc/passwd
$3="xxxx"
也能直接在awk操作命令中, 对某一个字段做值的赋予
如果有多个command, 要用;
做区隔
>>: Day08 - Gem-sidekiq-grouping 允许单个 sidekiq 处理多个相似(一样)的 jobs
终於完赛了,这篇文章会以个人完赛心得为主,可谓是零技术成分。(撒花~ 我以为完赛都是这样: 最後才没...
Azure cognitive service- 於是,Chatbot 也有了智慧 Azure 认知...
如同我们在Day14的时候提到的最常出现的四种资料类型,而前两天我们稍微谈了一下文字资料的基本处理,...
实作 按照之前 Rich Menu 的思路,我们可以让使用者在点选不同主选单位置的时候丢出不同的文...
很多人公司在设定广告活动时,常会犯了几个错,这些错也许不会造成什麽毁灭性的结果,但很有可能会每天浪费...