📜  awk 分隔符逗号 - Shell-Bash (1)

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

awk 分隔符逗号 - Shell-Bash

简介

在Shell/bash中,awk是一个非常强大的文本处理工具。通过使用不同的选项和参数,可以实现对文本文件的各种操作。其中一个很有用的特性是可以指定分隔符。在默认情况下,awk使用空格作为分隔符,但是我们可以通过-F(或--field-separator)选项来指定自定义分隔符。本文将介绍如何使用awk分隔符逗号。

语法
awk -F[,] 'BEGIN{...} pattern{...} END{...}' file

在上面的语法中:

  • -F[,]选项指定了分隔符为逗号。其中[,]是一种简写方式,表示逗号或空格或制表符。
  • BEGIN{...}语句块在处理文件前执行,可用于初始化变量或打印标题等操作。
  • pattern{...}语句块是awk的核心部分,它定义了如何处理文件的每一条记录。可以使用正则表达式等语法来匹配记录,然后在花括号内编写处理逻辑,常见的操作包括打印符合条件的记录或进行计数等。
  • END{...}语句块在处理文件后执行,可用于输出统计结果或打印尾部信息等操作。
  • file指定了要处理的文件,也可以把文件的内容作为标准输入(stdin)传入。
例子
例一:计算csv文件中某列数值之和

假设有一个csv文件data.csv,内容如下:

name,age,score
Tom,20,80
John,19,75
Amy,22,85

要计算每个人的总分数,可以使用以下的awk命令:

awk -F[,] 'BEGIN{sum=0}{sum+=int($3)}END{print "Total score: "sum}' data.csv

其中:

  • -F[,]选项指定逗号为分隔符。
  • BEGIN{sum=0}语句块初始化一个变量sum,并赋值为0。
  • {sum+=int($3)}逐行读取csv文件,累加第三列的整数值到sum变量中。$3表示第三个字段,int函数把字符串转换为整数。注意,逗号后面可以有空格,但是建议不要有空格,以免出现问题。
  • END{print "Total score: "sum}在处理文件后输出Total score: sum变量的值。

输出结果为:

Total score: 240
例二:把多个csv文件合并为一个

假设有多个csv文件data1.csvdata2.csvdata3.csv,每个文件都只包含两个字段:姓名和成绩,用逗号分隔。现在要把它们合并为一个大文件all_data.csv,每行的格式是:姓名、成绩、来源文件名。

可以使用以下的awk命令:

awk -F[,] '{print $1","$2,FILENAME}' data*.csv > all_data.csv

其中:

  • -F[,]选项指定逗号为分隔符。
  • {print $1","$2,FILENAME}逐行读取多个csv文件,打印每行的第一列、第二列和来源文件名,以逗号分隔。$1$2分别表示第一个和第二个字段,FILENAME表示当前处理的文件名。
  • data*.csv表示将多个文件名以通配符形式传入。

输出结果为:

Tom,80,data1.csv
John,75,data1.csv
Mary,85,data2.csv
...
总结

awk是一款功能强大的文本处理工具,支持各种分隔符和正则表达式等高级语法。在处理csv或其他结构化数据时,可以使用-F选项指定分隔符,然后通过花括号内的逻辑进行处理。熟练掌握awk的用法可以让我们更高效地完成日常工作。