松江生活网全新改版为令升网络,网址不变,QQ群不变(群1:171943922,群2:283136722)!

shell awk -F “” ‘{print $NF}’学习问题

电脑小白 lingsheng 441℃ 0评论

awk是一个linux中强大的文本分析工具,很多时候我们需要对应用日志进行分析,它就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。今天在网上看到一个朋友在CSDN问了个问题,实在看不下去了,希望有相同问题的朋友看完分析能够有所帮助,原问题。

想请教大侠个关于awk的问题:awk -F “” ‘{print $NF}’ 显示的是一行中最后一列的最后一个字符,why   ?????????。我明白{print $NF}是打印最后一列。但为啥加了-F “”就变为打印最后一列的最后一个字符?非常困惑。求高手。

加了-F,就是通过什么条件来进行查找,后面分了两个分号,意思就是通过分号来分割,默认是通过空格来分割的,比如下面两句的含义就完全不同(语句可以在macOS上面运行):

system_profiler SPHardwareDataType | grep “Serial Number (system):”

      Serial Number (system): C02xxxxx

system_profiler SPHardwareDataType | grep “Serial Number (system):” | awk -F’:’ ‘{print $(NF-1)}’

Serial Number (system)  — 通过:分割为两列Serial Number (system)和C02xxxxx,打印倒数第二列

system_profiler SPHardwareDataType | grep “Serial Number (system):” | awk ‘{print $NF-1}’

(system): —- 默认通过空格分割打印倒数第二列

所以上面的困惑应该迎刃而解了吧,如果NF不-1那么就是最后一列。

awk的语法

awk 后面没有BEGIN和END,跟着的是pattern,也就是每一行都会经过这个命令

$0 当前记录(这个变量中存放着整个行的内容)
$1~$n 当前记录的第n个字段,字段间由FS分隔
FS 输入字段分隔符 默认是空格或Tab
NF 当前记录中的字段个数,就是有多少列  #默认为最后一列
NR 已经读出的记录数,就是行号,从1开始,如果有多个文件话,这个值也是不断累加中。#默认为第一列
FNR 当前记录数,与NR不同的是,这个值会是各个文件自己的行号
RS 输入的记录分隔符, 默认为换行符
OFS 输出字段分隔符, 默认也是空格
ORS 输出的记录分隔符,默认为换行符
FILENAME 当前输入文件的名字

 

 

 

转载请注明:令升网络 » shell awk -F “” ‘{print $NF}’学习问题

喜欢 (7)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址