gpt4 book ai didi

linux - 根据字符串名称过滤 CSV 文件

转载 作者:太空宇宙 更新时间:2023-11-04 10:26:05 25 4
gpt4 key购买 nike

我正在尝试获取 csv 文件的特定列(以防万一,Header 包含“SOF”)。是一个大文件,我需要使用 Shell 将此列复制到另一个 csv 文件。

我试过这样的:

#!/bin/bash
awk ' {
i=1
j=1

while ( NR==1 )
if ( "$i" ~ /SOF/ )
then
array[j] = $i
$j += 1
fi
$i += 1

for ( k in array )
print array[k]

}' fil1.csv > result.csv

在这种情况下,我尝试将标题中包含“SOF”的列号保存在一个数组中。之后使用此数字复制列。

最佳答案

初步说明:与可以从 OP 中包含的代码推断的相反,CSV 中的值用分号分隔。

这是一个包含两个独立命令的解决方案:

  • 第一个解析 CSV 文件的第一行并确定必须导出的字段。为此,我使用 awk
  • 第二个只打印字段。我为此使用 cut(比 awk 更简单的语法和更快的速度,尤其是当您的文件很大时)

想法是第一个命令产生一个字段编号列表,用“,”分隔,适合作为参数传递给cut:

# Command #1: identify fields
fields=$(awk -F";" '
{
for (i = 1; i <= NF; i++)
if ($i ~ /SOF/) {
fields = fields sep i
sep = ","
}
print fields
exit
}' fil1.csv
)

# Command #2: export fields
{ [ -n "$fields" ] && cut -d";" -f "$fields" fil1.csv; } > result.csv

关于linux - 根据字符串名称过滤 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41523113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com