首页 > 解决方案 > 如何使用 awk 将两种不同类型的 csv 文件重新格式化为一种通用格式?

问题描述

我有一堆以下两种格式之一的 CSV 文件。

文件type-a.csv

name,age,breed,vip
jack,10,golden,no
mary,3,poodle,yes

文件type-b.csv

name,age,membership start,membership end,breed,vip
hazel,2,2018,2019,pit bull,yes
pot roast,4,2020,2021,lab,yes

我有两个问题。首先,我尝试使用 awk 将这些文件重新格式化为一种通用格式。像这样:

age,name,type,breed
10,jack,A,golden
3,mary,A,poodle
2,hazel,B,pit bull
4,pot roast,B,lab

这是我现在拥有的代码。我曾经find找到所有满足命名约定的 CSV 文件。但是,我不确定如何继续awk.

#find all csv files
for f in $(find $dir -iname 'type-*.csv' -type f)
do
        awk '
                BEGIN { Name=""; Type=""; Age=0; Breed=""; }                         
done

第二个问题是,这些文件都被命名为type-*.csv. 例如,type-a.csv,type-b.csv等。我想将这些类型作为第三type列包含到输出 CSV 文件中,但我不确定如何。

标签: unixawk

解决方案


我会做

{
    echo "age,name,type,breed"
    find . -name 'type-?.csv' -exec awk '
        BEGIN {FS = OFS = ","}
        FNR == 1 {
            type = toupper(substr(FILENAME, length(FILENAME)-4, 1))
            next
        }
        {print $2, $1, type, $(NF - 1)}
    ' '{}' +
} > output.csv

推荐阅读