You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Shell命令打乱CSV文件的列内容(而非行)?

解决方案:Shell命令实现CSV列内容打乱

针对你提出的三种CSV列打乱场景,以下是基于shuf、paste、cut等基础Shell工具的实现命令,适配你提供的R3.csv格式(分隔符为, ):

原始示例文件R3.csv

orderNo, id
67982,[89 55 12]
13230,[45 12 11]
13523,[31 67 12]
19821,[12 9 8]

场景1:仅打乱orderNo列,保持id列不变

提取orderNo列的数据行打乱后,与原id列数据行重新合并,保留表头:

{
  head -n 1 R3.csv;
  paste <(tail -n +2 R3.csv | cut -d',' -f1 | shuf) <(tail -n +2 R3.csv | cut -d',' -f2) | sed 's/\t/, /'
} > scenario1.csv
  • 命令说明:
    • head -n 1:保留原始表头
    • tail -n +2:提取所有数据行(跳过表头)
    • cut -d',' -f1:拆分出orderNo列,-f2拆分出id列
    • shuf:随机打乱指定列的内容
    • paste:将打乱后的orderNo列与原id列按行合并
    • sed 's/\t/, /':把paste默认的制表符分隔替换回原CSV的, 格式

生成的scenario1.csv与你提供的示例一致。


场景2:仅打乱id列,保持orderNo列不变

逻辑与场景1相反,打乱id列后与原orderNo列合并:

{
  head -n 1 R3.csv;
  paste <(tail -n +2 R3.csv | cut -d',' -f1) <(tail -n +2 R3.csv | cut -d',' -f2 | shuf) | sed 's/\t/, /'
} > scenario2.csv
  • 命令说明:仅将shuf作用于id列(cut -d',' -f2的输出),其余步骤同场景1。

场景3:同时打乱orderNo列和id列

分别打乱两列的数据行后再合并,两列的打乱完全独立:

{
  head -n 1 R3.csv;
  paste <(tail -n +2 R3.csv | cut -d',' -f1 | shuf) <(tail -n +2 R3.csv | cut -d',' -f2 | shuf) | sed 's/\t/, /'
} > scenario3.csv
  • 命令说明:对orderNo和id列分别执行shuf打乱,再通过paste合并,最终格式与原CSV一致。

内容的提问来源于stack exchange,提问作者Banu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:48:29