文本工具awk

awk是文本三剑客之一,功能最强大的文本工具。
逐行读取输入的文本内容,默认以空格和tab键作为分隔符,但是多个空格或者tab键的空格,会自动压缩成一个。按照指定的模式或者条件执行编辑命令
也是逐行匹配。对符合条件的才会进行格式化输出或者过滤
可以在免交互的情况下实现复杂的文本操作。完成自动化的配置。

awk '操作符 action’file
     目的  方法  处理对象
awk'BEGIN{x=1};{x++};END{处理动作}'文件名
awk'操作符{处理动作}'文件名
BEGIN对条件做初始化操作

for ((i=1;i<=10;i++))

awk的常用选项:

-F指定分隔符,如果是空格,tab键,可以不加

FS:列分隔符和F作用一致,如果使用FS,FS=”:”
OFS:输出内容的列分隔符
NF:最后一个字段
$n:内置变量
-v变量赋值。

awk'{print}'/etc/passwd
打印文本内容
内置变量:
NR:需要处理行的行号
打印行号:awk'{print NR,$0}'/etc/passwd
awk 'NR==3,NR==5{print}' test.txt#第三行到第五行

awk 'NR==3;NR==5{print}' test.txt第三行和第五行

awk 'NR%2==0{print}' test.txt偶数行

awk 'NR%2==1{print}'test.txt奇数行

awk -F: ‘ {print $2,$NF}'  /etc/passwd
NF:表示最后一列。

$n(><==):进行数值对比
$n~"字符串”:代表这个字段包含某个字符串
$n!~"字符串":代表这个字段不包含某个字符串
$n==“字符串”:代表这个字段要和字符串相同。
$n!=“字符串”:取反,不为某个字段
$NF:代表最后一个字段
1、/etc/passwd
输出最后一个字段中包含bash所在行的第一个字段和最后一个字段

2. /etc/passwd只有第一列是root的行,才打印它的第六列。


3.输出最后一个字段,不包含bash,然后打印:第一列和第六列


4.指定第六个字段为/home/dn而且最后一个字段为/bin/bash,满足条件的输出第一列和最后一列。

5.打印出所有第三列大于500的,然后输出全部内容。/etc/passwd

条件判断打印:

if语句:
if $3>500  打印所有:
awk的三元表达式:继承了java,格式和java也一样
awk{条件表达式1?A表达式或者值:B表达式或者值}文件名
awk -F: ‘ {max=($3>=$4)?$3:$4;{print max $0}} /etc/passwd’

?:
if else
if[$3>=$4]
then
echo $3
else
echo $4
fi

文本内容过滤打印

getline函数:getline和管道符以及重定向符号在一块的时候,
重定向:<>把其中一个文件的内容传给另外一个
|:输出指定内容,到定义的变量,getline调用变量当中的内容,打印结果。
getline函数运行之后会改变awk的内置变量,读取的行数也就发生变化,
getline在前,就是第一行跳过,打印第二行偶数行
getline在后,从第一行开始,跳过第二行,打印的就是奇数

BEGIN模式:
对变量初始化:
索引下标的值是唯一的。
awk'{a[$1]++};END{for(i in a){print i,a[i]}}'ky32.txt

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值