You need to enable JavaScript to run this app. 如何用cut命令提取pokemon.csv每行第三字段并优化分类循环
优惠活动
大模型
产品
解决方案
定价
更多

如何用cut命令提取pokemon.csv每行第三字段并优化分类循环

Shell脚本按Type1属性分类宝可梦CSV文件优化方案

方案可行性说明

你提到的通过cut提取Type1字段生成循环列表的思路是可行的,只需要补充去重、跳表头的逻辑即可,无需手动罗列全量属性值。

原有写法的问题修正

  • 原思路里的for i in pokemon.csv | cut -d , -f 3``写法有语法错误:不能直接把csv文件作为命令传入管道,需要给cut指定文件参数,同时要跳过表头、去重避免重复循环,正确的循环列表生成写法是:
    for i in $(cut -d ',' -f 3 "$1" | tail -n +2 | sort -u)
    
    其中tail -n +2作用是跳过csv第一行的表头,sort -u作用是对提取到的Type1属性去重,每个属性只循环一次。
  • 原有脚本的mkdir命令建议加-p参数:mkdir -p "$i",避免重复创建文件夹时报错。
  • 原有grep匹配逻辑有误:直接grep属性值会匹配到整行任意位置的内容(比如Type2字段匹配上也会被误分类),建议用awk精确匹配第三字段,同时保留表头到每个分类csv中。
  • 原有代码中包裹cat命令的反引号是多余的,反引号用于捕获命令输出,直接执行命令无需加反引号。

优化后完整脚本

#!/bin/bash
# 按Type1属性分类宝可梦csv脚本
if [ $# -eq 0 ]; then
    echo "Error: Missing Filename"
    echo "USAGE: sh $0 <pokemon.csv>"
    exit 1
fi
if [ ! -f "$1" ]; then
    echo "Error: File $1 does not exist"
    exit 1
fi
if [ ! -r "$1" ]; then
    echo "Error: File $1 is not readable"
    exit 1
fi
echo "FILE $1 is found, start classification..."
# 自动提取所有Type1属性去重后循环
for type in $(cut -d ',' -f 3 "$1" | tail -n +2 | sort -u)
do
    # 创建属性文件夹,不存在才创建
    mkdir -p "$type"
    # 精确匹配Type1为当前属性的行,包含表头写入对应csv
    awk -F',' -v t="$type" 'NR==1 || $3==t' "$1" > "${type}/pokemon_${type}.csv"
done
echo "Classification completed"

内容的提问来源于stack exchange,提问作者朱旭翔

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 21:51:04