shell 文件处理

挣扎中前行 2013-06-19 01:58:08
#!/bin/sh

while read line
do
if [ "$line" != "" ];then
ifileline=`echo $line|awk -F ':' '{print $1}'`
echo $ifileline
fi
done < $1



读取处理一个3M左右的文件非常的费时间,请问如何解析处理稍大文件的每一行?
...全文
260 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
挣扎中前行 2013-06-27
  • 打赏
  • 举报
回复
引用 15 楼 ljc007 的回复:
[quote=引用 14 楼 zhenwo123 的回复:] 好了!不能粘贴!
好了之后,请点击左上角“结贴”按钮[/quote]
ljc007 2013-06-26
  • 打赏
  • 举报
回复
引用 14 楼 zhenwo123 的回复:
好了!不能粘贴!
好了之后,请点击左上角“结贴”按钮
挣扎中前行 2013-06-25
  • 打赏
  • 举报
回复
引用 13 楼 zhenwo123 的回复:
[quote=引用 12 楼 ljc007 的回复:] [quote=引用 11 楼 zhenwo123 的回复:] 复制粘贴的啊!怎么空格啊!
手工照着抄一遍试试 等号后面是有空格的,但是你9楼贴出来的没有。[/quote] 真败了!各种试难道ubuntu下不支持?[/quote] 好了!不能粘贴!
挣扎中前行 2013-06-25
  • 打赏
  • 举报
回复
引用 12 楼 ljc007 的回复:
[quote=引用 11 楼 zhenwo123 的回复:] 复制粘贴的啊!怎么空格啊!
手工照着抄一遍试试 等号后面是有空格的,但是你9楼贴出来的没有。[/quote] 真败了!各种试难道ubuntu下不支持?
ljc007 2013-06-25
  • 打赏
  • 举报
回复
引用 11 楼 zhenwo123 的回复:
复制粘贴的啊!怎么空格啊!
手工照着抄一遍试试 等号后面是有空格的,但是你9楼贴出来的没有。
挣扎中前行 2013-06-24
  • 打赏
  • 举报
回复
引用 10 楼 justkk 的回复:
原样拷贝,不要自己写 RS后面是有空格的
复制粘贴的啊!怎么空格啊!
justkk 2013-06-24
  • 打赏
  • 举报
回复
原样拷贝,不要自己写

RS后面是有空格的
挣扎中前行 2013-06-24
  • 打赏
  • 举报
回复
引用 8 楼 ljc007 的回复:
[quote=引用 7 楼 zhenwo123 的回复:] 文件内容是很多软件包的信息(每个包信息以空行分割),格式如下 Pakage:name version:123 size:456 依赖关系等信息。 我想提取指定软件包名的信息,若匹配了name则将其下信息提取出,一个awk能够吗?
[root@rhel6 tmp]# cat urfile Pakage: name version: 123 size: 456 Pakage: csdn1 version: 123 size: 456 Pakage: csdn2 version: 123 size: 456 [root@rhel6 tmp]# awk -v RS= '/Pakage: name/' urfile Pakage: name version: 123 size: 456[/quote] 我测试了下提示这个呢? bash: awk -v RS=/Pakage: name/: 没有那个文件或目录
ljc007 2013-06-24
  • 打赏
  • 举报
回复
引用 7 楼 zhenwo123 的回复:
文件内容是很多软件包的信息(每个包信息以空行分割),格式如下 Pakage:name version:123 size:456 依赖关系等信息。 我想提取指定软件包名的信息,若匹配了name则将其下信息提取出,一个awk能够吗?
[root@rhel6 tmp]# cat urfile Pakage: name version: 123 size: 456 Pakage: csdn1 version: 123 size: 456 Pakage: csdn2 version: 123 size: 456 [root@rhel6 tmp]# awk -v RS= '/Pakage: name/' urfile Pakage: name version: 123 size: 456
挣扎中前行 2013-06-22
  • 打赏
  • 举报
回复
引用 5 楼 ljc007 的回复:
性能低的原因是,你在while循环里面不停的调用awk,文件有多少行,就好调用多少次,浪费了太多系统资源。 请给出部分原始文本,并说清楚你希望如何处理。 一般来说,一个awk命令就足够了。
文件内容是很多软件包的信息(每个包信息以空行分割),格式如下 Pakage:name version:123 size:456 依赖关系等信息。 我想提取指定软件包名的信息,若匹配了name则将其下信息提取出,一个awk能够吗?
ForestDB 2013-06-21
  • 打赏
  • 举报
回复
perl不好么 python不好么 ruby不好么 tcl不好么 ⋯⋯
ljc007 2013-06-21
  • 打赏
  • 举报
回复
性能低的原因是,你在while循环里面不停的调用awk,文件有多少行,就好调用多少次,浪费了太多系统资源。 请给出部分原始文本,并说清楚你希望如何处理。 一般来说,一个awk命令就足够了。
Reo_A_ 2013-06-21
  • 打赏
  • 举报
回复
引用 3 楼 zhenwo123 的回复:
[quote=引用 1 楼 nicenight 的回复:]
把你整个while循环改成这一句话:
awk -F':' '!/^$/{print $1}' $1

如果不判断空行的话,用这个也行:
cut -d':' -f1 file
只是简单的几句代码例子,我还要解析处理每行的数据啦!?[/quote] awk -F ":" '{ if($0=="") next ... printf("%s\n",$1) }END{ }' file > outfile
挣扎中前行 2013-06-19
  • 打赏
  • 举报
回复
引用 1 楼 nicenight 的回复:
把你整个while循环改成这一句话:
awk -F':' '!/^$/{print $1}' $1

如果不判断空行的话,用这个也行:
cut -d':' -f1 file
只是简单的几句代码例子,我还要解析处理每行的数据啦!?
nicenight 2013-06-19
  • 打赏
  • 举报
回复
上面的 file 忘记替换为参数1了: cut -d':' -f1 $1
nicenight 2013-06-19
  • 打赏
  • 举报
回复
把你整个while循环改成这一句话:
awk -F':' '!/^$/{print $1}' $1

如果不判断空行的话,用这个也行:
cut -d':' -f1 file

23,124

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧