gpt4 book ai didi

linux - 遍历 CSV 文件中的每一列并将不同的值导出到文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:50:12 27 4
gpt4 key购买 nike

我有一个包含 A-O 列的 CSV 文件。 50 万行。在 Bash 中,我想遍历每一列,获取不同的值并将它们输出到文件中:

sort -k1 -n -t, -o CROWN.csv CROWN.csv && cat CROWN.csv | cut -f1 -d , | uniq > EMPLOYEEID.csv
sort -k2 -n -t, -o CROWN.csv CROWN.csv && cat CROWN.csv | cut -f2 -d , | uniq > SORTNAME.csv

这可行,但对我来说非常手动并且如果有大约 100 列则无法真正扩展。

代码就地对列进行排序,然后将指定的列传递给 uniq 以获取不同的值,然后将其输出。

注意:第一行是标题信息。

上面的代码有效,但我想稍微简化一下。

最佳答案

假设标题可以用作每一列的文件名:

head -1 test.csv | \
tr "," "\n" | \
sed "s/ /_/g" | \
nl -ba -s$'\t' | \
while IFS=$'\t' read field name; do
cut -f$field -d',' test.csv | \
tail -n +2 | sort -u > "${name}.csv" ;
done

解释:

  • head - 读取第一行
  • tr- 用新行替换 ,
  • sed - 用 _ 替换空白以获得更清晰的文件名(tr 也可以,然后您可以与前一个结合使用,但如果您需要更复杂的转换,请使用 sed)
  • nl - 添加字段编号
    • -ba - 为所有行编号
    • -s$'\t' - 将分隔符设置为制表符(不是必需的,因为它是默认设置,但为了清楚起见)
  • while - 读取槽字段编号/名称
  • cut - 选择字段
  • tail - 去掉标题,不是所有tail都有这个选项,可以用sed代替
  • sort -u - 排序并删除重复项
  • >"$name.csv" - 以适当的文件名保存

注意:这假设没有 , int 字段,否则您将需要使用 csv 解析器

关于linux - 遍历 CSV 文件中的每一列并将不同的值导出到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57942940/

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