awk 中 FS的用法

在openwrt文件 ar71xx.sh中

查询设备类型时,有这么一句,

machine=$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /machine/ {print $2}' /proc/cpuinfo)
解决:
1)查看cpuinfo
root@hbg:/dev# cat  /proc/cpuinfo
system type             : Qualcomm Atheros QCA9533 rev 2
machine                 : Atheros AP143 reference board
processor               : 0
cpu model               : MIPS 24Kc V7.4
BogoMIPS                : 432.53
wait instruction        : yes
microsecond timers      : yes
tlb_entries             : 16
extra interrupt vector  : yes
hardware watchpoint     : yes, count: 4, address/irw mask: [0x0000, 0x0ff8, 0x0ff8, 0x0ff8]
isa                     : mips1 mips2 mips32r1 mips32r2
ASEs implemented        : mips16
shadow register sets    : 1
kscratch registers      : 0
core                    : 0
VCED exceptions         : not available
VCEI exceptions         : not available
2)awk截取信息, FS为指定格式; 以 “:” 冒号为分界符,两边都是制表符"\t",第二个参数
   /machine指定了以machine为开始的那一行
  
所以命令的结果是:
Atheros AP143 reference board  

 

==============================================

补充知识:

awk中常见的内建变量(Built-in Variables)

NF( Number of Fields ) : awk 读入一行数据的字段数,通俗地说,就是一行数据被划分成了几段?便于对各字段进行遍历
NR( Number of Records ) : awk 已读入的行数,相当于一个计数器。
RS( Record Separator ) : 行分隔符。awk从文件上读取资料时, 将根据 RS 的定义把资料切割成许多Records,awk一次仅读入一个Record,以进行处理。预设值是'\n'
FS( Field Separator ) : 列分割符。决定了怎么将一行划分为几段。预设值是 空白符(空白和Tab)
FILENAME : awk 正在处理的数据文件名

例如:

创建一个 data.txt的文件,内如如下:(共3行,其中第三行为空)

a:b   c:d    123

w:q   d:e    234

 

执行命令:

 

hbg@root:~/dl/test$ awk 'BEGIN{FS="[ :]+"}{print $0, $1, NR, NF}' data.txt
a:b c:d 123 a 1 5
q:w d:e 234 q 2 5
  3 0
hbg@root:~/dl/test$ awk 'BEGIN{FS="[ :]+"}{print $0}' data.txt       // 打印所有数据
a:b c:d 123
q:w d:e 234

 

hbg@root:~/dl/test$ awk 'BEGIN{FS="[ :]+"}{print $1}' data.txt      // 打印分隔符的第一列
a
q

 

hbg@root:~/dl/test$ awk 'BEGIN{FS="[ :]+"}{print $2}' data.txt      // 打印分隔符的第二列
b
w

 

hbg@root:~/dl/test$ awk 'BEGIN{FS="[ :]+"}{print NR}' data.txt     // 打印行号
1
2
3
hbg@root:~/dl/test$ awk 'BEGIN{FS="[ :]+"}{print NF}' data.txt    // 段数(一行被分成了几段)
5
5
0
hbg@root:~/dl/test$

 

转载于:https://www.cnblogs.com/rohens-hbg/p/5510890.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Awk 是一种文本处理工具,它被广泛用于 Linux 系统的文本处理和数据提取。它基于模式匹配和动作执行的方式工作,可以按照指定的模式来匹配输入文本,并执行相应的操作。 下面是一些 Awk 的常见用法: 1. 基本语法:`awk 'pattern { action }' file`,其 pattern 是用来匹配输入行的模式,action 是在匹配成功时执行的操作,file 是要处理的输入文件名。 2. 默认情况下,Awk 会将输入行按照空格或制表符进行分割,并将分割后的字段存储在预定义的变量 `$1`, `$2`, `$3` 等。 3. 输出字段:使用 `print` 命令来输出字段。例如,`print $1` 将输出第一个字段,`print $2, $3` 将输出第二和第三个字段。 4. 指定字段分隔符:可以使用 `-F` 参数来指定字段分隔符。例如,`awk -F ',' '{ print $1 }' file` 将以逗号为分隔符输出第一个字段。 5. 条件匹配:Awk 可以根据条件来进行行的匹配和操作。例如,`awk '$1 > 10 { print $0 }' file` 将输出第一个字段大于 10 的行。 6. 内置变量:Awk 提供了许多内置变量,如 `NR`(当前行号),`NF`(当前行的字段数量),`FS`(字段分隔符)等,可以在操作使用。 7. 正则表达式匹配:Awk 支持正则表达式匹配。例如,`awk '/pattern/ { print $0 }' file` 将输出匹配到 pattern 的行。 8. 循环和条件语句:Awk 支持循环和条件语句,可以根据需要在操作使用。 以上是 Awk 的一些常见用法,你可以根据具体需求来灵活运用。如果你需要更详细的用法和示例,请参考 Awk 的官方文档或其他相关资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值