awk 使用
awk 是一个文本处理工具,主要用在文本“列处理”
1
| awk + 选项(可不带) +'命令' + 处理文件或内容
|
选项参数:
可输入awk -W help查看
常用
1 2 3 4 5 6 7 8
| -F fs or --field-separator fs 指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F ‘:’ 则以“:” 分割。
-v var=value or --asign var=value 赋值一个用户定义变量。
-f scripfile or --file scriptfile 从脚本文件中读取awk命令。
|
变量名关键词
1 2 3 4 5 6 7 8 9 10 11 12
| NF:表示当前记录的字段数。 $NF:表示当前记录的最后一个字段。 $(NF-1):表示当前记录的倒数第二个字段。 NR:表示当前处理的是第几行记录。 FILENAME:当前处理的文件名。 FS:字段分隔符,默认是空格或制表符。 RS:记录分隔符,默认是换行符。 OFS:输出字段的分隔符,默认为空格。 ORS:输出记录的分隔符,默认为换行符。 OFMT:数字输出格式,默认为%.6g。
|
函数
toupper():字符转为大写。
tolower():字符转为小写。
length():返回字符串长度。
substr():返回子字符串。
sin():正弦。
cos():余弦。
sqrt():平方根。
rand():随机数。
示例:转换字段为大写
1
| awk -F ':' '{ print toupper($1) }' test.txt
|
基本用法
1 2
| # 打印文件的第一列和第三列 awk '{ print $1, $3 }' test.txt
|
条件语句
1 2 3 4 5 6 7 8 9
| # 输出奇数行的某一字段 awk -F ':' 'NR % 2 == 1 { print $1 }' test.txt
# 输出第三列以后的字段 awk -F ':' 'NR > 3 { print $1 }' test.txt
# 条件判断 awk -F ':' '{ if ($1 > "m") print $1; else print "---" }' test.txt
|
高级用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # 使用split()函数分割字段并打印 awk -F ',' '{ for (i=1; i<=NF; i++) print $i }' test.txt
# 使用gsub()函数全局替换文本 awk '{ gsub("foo", "bar"); print }' test.txt
# 打印包含特定字符串的行 awk '/pattern/ {print substr($0, RSTART, RLENGTH)}' test.txt
# 使用BEGIN和END块在处理前后执行代码 awk 'BEGIN { print "Start processing" } { print } END { print "End processing" }' test.txt
# 格式化打印,将数字转换为货币格式 awk '{printf "$%.2f\n", $1}' test.txt
# 使用数组存储和遍历字段值 awk '{ arr[$1] = $2 } END { for (i in arr) print i, arr[i] }' test.txt
|
多文件处理
1 2
| # 从多个文件中读取数据 awk 'NR==1{print "File:", FILENAME; next} {print $0}' file1.txt file2.txt file3.txt
|