📅  最后修改于: 2023-12-03 15:13:34.171000             🧑  作者: Mango
在 Shell-Bash 编程中,我们经常需要处理文本文件中的数据。awk 是一种在 Unix 和类 Unix 操作系统上用于处理文本的编程语言。它可以用来在文本中查找、过滤、格式化以及抽取数据。
awk 命令的一般语法如下:
awk [选项参数] '条件类型1 {动作1} 条件类型2 {动作2} ...' 文件名
其中,[选项参数]
可以省略。条件类型
可以是以下类型之一:
/正则表达式/
:匹配到指定的正则表达式时执行后面的动作$n ~ /正则表达式/
:对于每行,如果字段 n 匹配到指定的正则表达式时执行后面的动作/正则表达式/,/正则表达式/
:对于每行,在两个正则表达式之间的行执行后面的动作BEGIN
:在所有行之前执行一次该动作END
:在所有行处理完成之后,执行一次该动作动作
可以是以下之一:
{print}
:打印整行{print $n}
:打印第 n 个字段{printf}
:格式化打印,可以使用格式化占位符 %s,%d 等{赋值语句}
:定义变量和赋值if (条件) 操作
:基于某些条件执行一个操作for (变量初始化条件; 循环条件; 操作) 动作
:执行具有迭代条件的操作在 awk 中,数据文件默认的字段分隔符是空格,也就是参数 -F
的默认值是 ' '
。如果要改变字段分隔符,可以使用 -F
选项参数。
例如,如果要将以 TAB 作为字段分隔符的文件 file.tsv
的第二个字段中所有的小写字母转化为大写字母:
awk -F'\t' '{ $2 = toupper($2); print }' file.tsv
其中,-F'\t'
表示字段分隔符为 TAB。toupper($2)
表示将第二个字段转化为大写字母。print
将每行打印出来。
以下是一个示例,将使用空格和 TAB 作为字段分隔符的文件 file.txt
的第一列和第二列交换位置,并将第二列转换为大写字母:
awk '{temp=$1; $1=$2; $2=temp; $2=toupper($2); print}' file.txt
其中,temp=$1
保存第一列的值到变量 temp
。$1=$2
将第二列的值赋给第一列。$2=temp
将之前保存的第一列的值赋给第二列。$2=toupper($2)
将第二列转化为大写字母。print
将每行打印出来。
awk 命令是在 Shell-Bash 编程中一个非常强大的工具,它可以用于处理文本文件中的数据。使用 -F
选项可以改变默认的字段分隔符。掌握 awk 命令可以使 Shell-Bash 编程更加高效。