📜  awk 根据列值拆分 csv 文件 - Shell-Bash (1)

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

Awk 根据列值拆分 CSV 文件 - Shell-Bash

在开发过程中,我们通常需要从大型 CSV 文件中提取特定列的数据,或者根据特定列的值拆分该文件。这是一个很有用的技能,可以用 awk 和 bash 脚本来实现。

前置知识

在本指南中,我们将使用 awk 和 bash。如果您不熟悉这些工具,请先学习它们的基础知识。

目标

我们的目标是从一个 CSV 文件中提取一列数据,并将其拆分为多个文件,每个文件名基于该列的值。

例如,我们有一个以下结构的CSV文件:

Name,Age,Salary
John,24,45000
Alice,32,60000
Bob,27,55000

我们将根据第一列的值拆分该文件,并将每个人的信息保存在单独的文件中,文件名以他们的姓名命名。

解决方案

我们可以使用 awk 命令来解析 CSV 文件,使用 bash 来拆分它们。

先来看看使用 awk 命令提取 CSV 文件的某一列的数据。

awk -F ',' '{print $1}' file.csv

上面的命令会将文件 file.csv 中每一行的第一列提取出来,并打印到终端上。

接下来,我们需要将每个行的信息保存到单独的文件中。这可以使用 bash 脚本来做到。

#!/bin/bash

filename="file.csv"

# Ignore header row
tail -n +2 $filename | while read row; do
    name=$(echo $row | awk -F ',' '{print $1}')
    line="$row"

    # Write to file
    echo $line >> "$name.csv"
done

上述代码将文件名设置为 filename,然后通过 tail 命令忽略第一行,对其余每一行循环;使用 awk 命令从每一行中提取姓名,并将姓名作为文件名,然后将该行数据附加到该文件中。

结论

在这篇文章中,我们使用 awkbash 来解析 CSV 文件,并使用从中提取的值来拆分该文件。这是一种非常有用的技巧,特别是在需要处理大型 CSV 文件时。