LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 811|回复: 8

问一个分割文件的问题[已解决]

[复制链接]
发表于 2004-2-23 16:43:39 | 显示全部楼层 |阅读模式
有这样一个csv文件test.csv
001 aaaaaaa
002 bbbbbbb
001 ccccccc
通过什么命令能将这个文件按照第一个字段排序,并且分割成
按照第一个字段命名的多个文件。例如:
001.csv
内容
001 aaaaaaa
001 ccccccc
002.csv
内容
002 bbbbbbb
发表于 2004-2-23 18:32:27 | 显示全部楼层

  1. ## 更简洁的用法
  2. while read xx; do
  3.   echo "$xx" >> $(echo $xx | awk '{ print $1; }').csv
  4. done < test.csv
复制代码
发表于 2004-2-23 18:39:19 | 显示全部楼层
  1. for file in $(for i in $(cut -f1 -d" " <test.csv|sort|uniq);do echo $i;done);do
  2.         grep "^$file" test.csv >>${file}.csv
  3. done
复制代码
发表于 2004-2-23 18:54:31 | 显示全部楼层

  1. while read xx
  2.   do echo "$xx" >> ${xx%% *}.csv
  3. done < test.csv
复制代码
发表于 2004-2-23 19:00:17 | 显示全部楼层
我的理解可能有点儿问题:他的原意好像要求最终的各个文件是 sorted,还是 javalee 的方法保险些。还有,我的方法只能 run 一次,除非每次都要先把 001.csv 这样的文件给 delete 掉
发表于 2004-2-23 19:07:27 | 显示全部楼层

  1. ## 这样应该可以了:
  2. for i in $(awk '{ print $1; }' test.csv | sort | uniq)
  3.   do grep "^$i\>" test.csv | sort > $i.csv
  4. done
复制代码
发表于 2004-2-23 22:40:02 | 显示全部楼层
楼主只要求按照第一个字段排序,这样如何?
  1. awk '{print $0 >$1".csv"}' test.csv
复制代码
 楼主| 发表于 2004-2-24 07:59:48 | 显示全部楼层
偶去试试看。谢谢各位大人呢!
发表于 2004-2-24 08:49:23 | 显示全部楼层
最初由 r2007 发表
楼主只要求按照第一个字段排序,这样如何?
  1. awk '{print $0 >$1".csv"}' test.csv
复制代码

此法甚妙, 佩服
平日用 awk 不多, 不知其有如此功能, 今日见识了, 多谢指教
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表