📜  awk 字段分隔空间 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:13:34.171000             🧑  作者: Mango

awk 字段分隔空间 - Shell-Bash

在 Shell-Bash 编程中,我们经常需要处理文本文件中的数据。awk 是一种在 Unix 和类 Unix 操作系统上用于处理文本的编程语言。它可以用来在文本中查找、过滤、格式化以及抽取数据。

awk 命令

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 编程更加高效。