linux awk命令

来源:互联网 发布:美股模拟交易软件java 编辑:程序博客网 时间:2024/05/20 11:24

linux awk命令

  • 适合格式化文本,对文本进行较复杂格式处理

基本用法,

  • awk '{[pattern] action}' {filenames}, ”只能单引号
  • test文本log.txt
2 this is a test3 Are you like awkThis's a test10 There are orange,apple,mongo
  • awk '{print $1,$4}' log.txt 按空格输出文本的1、4项

  • awk -F 指定分割符
    awk -F, '{print $1,$2}' log.txtawk -F ',' '{print $1,$2}' log.txt
    awk-f

  • 多个分隔符
 awk -F '[ ,]'  '{print $1,$2,$5}'   log.txt

muti_splitline

  • awk设置变量 awk -v # 设置变量
awk -va=1 '{print $1,$1+a}' log.txt

awk-va

  • awk -f {awk脚本} {文件名}
 awk -f cal.awk log.txt

cal.awk

#!/bin/awk -f#运行前BEGIN {    math = 0    english = 0    computer = 0    printf "NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL\n"    printf "---------------------------------------------\n"}#运行中{    math+=$3    english+=$4    computer+=$5    printf "%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3,$4,$5, $3+$4+$5}#运行后END {    printf "---------------------------------------------\n"    printf "  TOTAL:%10d %8d %8d \n", math, english, computer    printf "AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NR}
  • 计算文件大小
ls -l *.awk | awk '{sum+=$5} END {print sum}'
  • 查找文件内行数大于多少字符的行
awk 'length>1' log.txt
  • 运算符
运算符                     描述= += -= *= /= %= ^= **=     赋值?:                          C条件表达式||                          逻辑或&&                          逻辑与~ ~!                      匹配正则表达式和不匹配正则表达式< <= > >= != ==             关系运算符空格                          连接+ -                         加,减* / %                       乘,除与求余+ - !                       一元加,减和逻辑非^ ***                       求幂++ --                       增加或减少,作为前缀或后缀$                          字段引用in                          数组成员

例子

 awk '$1>2' log.txt                                 过滤第一列大于2的行 awk '$1==2 {print $1,$3}' log.txt                  过滤第一列等于2的行 awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt   过滤第一列大于2并且第二列等于'Are'的行
  • 内建变量(不细讲),如
FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS
  • 正则(~ 表示模式开始。// 中是模式)
 awk '$2 ~ /th/ {print $2,$4}' log.txt # 输出第二列包含 "th",并打印第二列与第四列
  • 忽略大小写
 awk 'BEGIN{IGNORECASE=1} /this/' log.txt
  • 模式取反
awk '$2 !~ /th/ {print $2,$4}' log.txt
原创粉丝点击