日期:2014-05-16  浏览次数:20655 次

shell 文件处理
#!/bin/sh

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



读取处理一个3M左右的文件非常的费时间,请问如何解析处理稍大文件的每一行?

------解决方案--------------------
把你整个while循环改成这一句话:
awk -F':' '!/^$/{print $1}' $1

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

------解决方案--------------------
性能低的原因是,你在while循环里面不停的调用awk,文件有多少行,就好调用多少次,浪费了太多系统资源。
请给出部分原始文本,并说清楚你希望如何处理。
一般来说,一个awk命令就足够了。
------解决方案--------------------
引用:
文件内容是很多软件包的信息(每个包信息以空行分割),格式如下 
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