LinuxSir.cn,穿越时空的Linuxsir!

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

文本转换为CSV 怎么写

[复制链接]
发表于 2007-9-20 11:49:01 | 显示全部楼层 |阅读模式
下面是文件内容
Mon Sep 17 21:01:01 CST 2007
Tue Sep 18 12:01:01 CST 2007
Tue Sep 18 17:01:00 CST 2007
Tue Sep 18 21:01:00 CST 2007
Wed Sep 19 12:01:00 CST 2007
Wed Sep 19 17:01:01 CST 2007
Wed Sep 19 21:01:01 CST 2007
0%
0%
0%
18%
0%
0%
0%
121.347
35.825
35.793
94.293
35.859
35.804
80.624
277.91 KB/s
881.63 KB/s
892.12 KB/s
109.34 KB/s
890.75 KB/s
879.22 KB/s
406.62 KB/s
我想把这个文件导到一个CSV文件中,第2排为时间 第2排为百分比 第3排为为速度1(121.347开始)第4排为速度(2277.91 KB/s开始)

要用sed /awk/还是......
高人指点一下!
Thanks
发表于 2007-9-21 16:20:03 | 显示全部楼层
我也想知道

  1. $file = cat file
  2. for ($x=0;$x -lt 7;$x++) { [string]::join(",", $(for ($y=$x;$y -lt $file.count;$y+=7) { $file[$y] }))} #PowerShell, 把7放入变量就好了。
复制代码
回复 支持 反对

使用道具 举报

发表于 2007-9-24 10:35:07 | 显示全部楼层
用awk取得域值,直接打印出来就可以了。每个字符域后面用 \t (TAB键)或者 , (逗号) 隔开即可。
回复 支持 反对

使用道具 举报

发表于 2007-10-4 19:27:34 | 显示全部楼层
Post by seamonkey
我也想知道

  1. $file = cat file
  2. for ($x=0;$x -lt 7;$x++) { [string]::join(",", $(for ($y=$x;$y -lt $file.count;$y+=7) { $file[$y] }))} #PowerShell, 把7放入变量就好了。
复制代码


请问这个PowerShell是windows下面的命令行么?
怎么用?
回复 支持 反对

使用道具 举报

发表于 2007-10-4 21:06:25 | 显示全部楼层
  1. #!/bin/bash
  2. #第一个参数是文件名(包含数据的文件)
  3. rows=$(($(wc -l < $1)/4))   #获取记录数,用总行数/4
  4. i=0
  5. j=0
  6. k=0
  7. while read line
  8. do
  9.   j=$((i%rows))
  10.   k=$((i/rows))
  11.   eval "col${k}[$j]='$line'"
  12.   ((i++))
  13. done <$1
  14. for((i=0;i<rows;i++))
  15. do
  16.   echo -e "${col0[$i]}\t${col1[$i]}\t${col2[$i]}\t${col3[$i]}"
  17. done
复制代码

注: 每列之间是用tab键分隔
回复 支持 反对

使用道具 举报

发表于 2007-10-4 21:16:21 | 显示全部楼层
  1. awk '{a[NR-1]=$0};END{rows=NR/4;for(i=0;i<rows;i++) print a[i] "\t" a[rows+i] "\t" a[rows*2+i] "\t" a[rows*3+i]}' 数据文件
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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