专业编程基础技术教程

网站首页 > 基础教程 正文

Linux 三剑客之awk 命令(linux awk命令使用实例)

ccvgpt 2025-04-01 16:18:33 基础教程 4 ℃

1. 简介

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。

类似于sql: awk=select field from table

Linux 三剑客之awk 命令(linux awk命令使用实例)

之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

     awk脚本通常由以下3部分构成:

  BEGIN{ 这里面放的是执行前的语句 } 

  END {这里面放的是处理完所有的行后要执行的语句 }

  {这里面放的是处理每一行时要执行的语句}

2. 基本用法

awk [选项参数] 'script' var=value file(s)

awk [选项参数] -f scriptfile var=value file(s)

2.1 处理指定文件的内容

  awk 'condition { action }' filename

2.2 处理某个命令的执行结果

  command | awk ' condition { action }'

3. 变量


3.1 FS(字段分隔符)
-F fs or --field-separator fs
指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:

# $0 表示当前整行内容,$1,$2 表示第一个字段,第二个字段
# 默认以空格作为分隔符 输出第一个字段
echo "aa bb  cc dd  ee ff" | awk  '{print $1}'
# 以丨作为
echo "aa bb l cc dd l ee ff" | awk -F 'l' '{print $1}'

echo "aa bb  cc : dd  ee ff" | awk -F ':' '{print $1}'



3.2 NF(当前行的字段个数)

$NF就代表最后一个字段,$(NF-1)代表倒数第二个字段

#以空格为分隔符打印最后一个字段 
echo "aa bb cc  dd" | awk '{ print $NF}'
#以空格为分隔符打印倒数第二个字段 
echo "aa bb cc  dd" | awk '{ print $(NF-1)}'
#以|为分隔符 打印倒数第二个字段
echo "aa bb cc  dd" | awk -F '|' '{ print $(NF-1)}'


3.3 NR (当前处理的是第几行)

cat test.txt | awk '{print NR")", $0}'

3.4 FILENAME(当前文件名)

awk '{print FILENAME, NR")", $0}' test.txt 


3.5 其他变量

  • RS:行分隔符,用于分割每一行,默认是换行符。
  • OFS:输出字段的分隔符,用于打印时分隔字段,默认为空格。
  • ORS:输出记录的分隔符,用于打印时分隔记录,默认为换行符。
  • OFMT:数字输出的格式,默认为%.6g。

4. 函数

4.1 print 和 printf

用于打印输出的函数

4.2 常用函数

  • substr():返回子字符串。
  • substr($1,2):返回第一个字段,从第2个字符开始一直到结束。
  • substr($1,2,3):返回第一个字段,从第2个字符开始开始后的3个字符。
  • sin():正弦。
  • cos():余弦。
  • sqrt():平方根。
  • rand():随机数。
  • toupper():字符转为大写。
  • tolower():字符转为小写。

5 正则表达式

# 查找包含root的行 
cat test.txt | awk '/root/ {print $0}'
#查找包含user和orange的行
cat test.txt | awk '/usr\/orange/ {print $0}'


Tags:

最近发表
标签列表