linux--awk

awk 命令可以用来过滤文本,简单理解就是对文本的每行执行命令awk指定的脚本.

基本命令格式如下:

awk [选项] '条件{编辑指令}' 文件

选项

-F 指定分隔符,可省略-F (默认空格或Tab位)
处理文本时,若未指定分隔符,则默认将空格、制表符等作为分隔符。print是最常见的指令。
🐖 编辑指令如果包含多条语句时,可以用分号分隔, eg:

awk -F: '{$1="Description:"; print $0}' test.txt

eg:

cat test.txt 
# 
a:bb:ccc:d
1:2::@:4
# 运行命令,输出:
Description: bb ccc d
Description: 2  @ 4

🐖 -F:指定“:”为字段分隔符

数据字段变量

$0表示整行文本
$1表示文本行中第一个数据字段
$n表示文本行中第n个数据字段

awk '{print NR}' 1.txt

🐖 只打印行号,不显示文本内容
🐖:NR: Number of Record (记录数) ,$NR 暂时未明白??

打印每行的文本:

awk '{print $0}' 1.txt

打印每行,并为每行带上行号:

awk '{print NR":",$0}' 1.txt

🐖 NR : 表示记录数,在执行过程中对应于当前的行号
🐖 NR":",$0是满足print语法的写法

打印每行的第1列(默认用空格分离):

awk '{print $1}' 1.txt

打印每行的最后1列(默认用空格分离):

awk '{print $NF}' 1.txt

🐖 NF : 表示字段数,NF: Number of Field (字段数)在执行过程中对应于当前的字段数$NF :表示最后一个字段的内容 [从左往右]

打印每行的倒数第2列(默认用空格分离):

awk '{print $(NF-1)}' 1.txt

用awk打印除第一列之外的所有列

awk '{for(i=2;i<=NF;++i) print $i}' test.txt
或者awk '{for(i=2;i<=NF;++i) printf $i ;printf "\n"}' test.txt

🐖shell中的print和printf的区别:

  • print按照默认的分隔符打印一个或多个变量或常量(字符串),末尾自动换行;
  • printf可以格式化后输出每个变量,(可以控制打印位置、分割、占位宽度、数值的显示方式、位数等),末尾不会自动换行,如需换行需要在printf第一个格式字符串参数末尾使用“\n”

在处理数据之前运行脚本

awk默认每次读入一行数据,然后用脚本进行处理。如果想在处理文本之前预处理一些命令,可以用BEGIN关键字指定。用END关键字在处理完所有数据后,再运行善后处理工作。

awk 'BEGIN{ commands } pattern{ commands } END{ commands }' file

其中:

  • BEGIN{ commands } 指定最开始执行的脚本
  • pattern{ commands } 对文件的每一行遍历,判断是否满足pattern的模式,如果满足则执行脚本
  • END{ commands } 指定最后执行的脚本

eg:打印“开始”,打印每行,打印“结束”:

awk 'BEGIN{ print "开始" } { print } END{ print "结束" }' 1.txt

输出

awk ‘{print $1$2}’ 表示每行分割后,将第一列(第一个字段)和第二列(第二个字段)连接在一起输出。
awk ‘{print $1 $2}’ 表示每行分割后,将第一列(第一个字段)和第二列(第二个字段)以默认输出分隔符”空格“隔开后显示。
awk ‘{print $1,$2}’ 表示每行分割后,将第一列(第一个字段)和第二列(第二个字段)以输出分隔符“,”隔开后显示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值