• 为了保证你在浏览本网站时有着更好的体验,建议使用类似Chrome、Firefox之类的浏览器~~
    • 如果你喜欢本站的内容何不Ctrl+D收藏一下呢,与大家一起分享各种编程知识~
    • 本网站研究机器学习、计算机视觉、模式识别~当然不局限于此,生命在于折腾,何不年轻时多折腾一下

Shell脚本逐行处理文本文件

Linux admin 10个月前 (09-03) 449次浏览 0个评论 扫描二维码

经常会对文体文件进行逐行处理,在 Shell 里面如何获取每行数据,然后处理该行数据,最后读取下一行数据,循环处理.有多种解决方法如下:

1.通过 read 命令完成.

read 命令接收标准输入,或其他文件描述符的输入,得到输入后,read 命令将数据放入一个标准变量中.

利用 read 读取文件时,每次调用 read 命令都会读取文件中的”一行”文本.

当文件没有可读的行时,read 命令将以非零状态退出.

1 cat data.dat | while read line
2 do
3     echo "File:${line}"
4 done
5 
6 while read line
7 do 
8     echo "File:${line}"
9 done < data.dat

2.使用 awk 命令完成

awk 是一种优良的文本处理工具,提供了极其强大的功能.

利用 awk 读取文件中的每行数据,并且可以对每行数据做一些处理,还可以单独处理每行数据里的每列数据.

1 cat data.dat | awk '{print $0}'
2 cat data.dat | awk 'for(i=2;i<NF;i++) {printf $i} printf "\n"}'

第 1 行代码输出 data.dat 里的每行数据,第 2 代码输出每行中从第 2 列之后的数据.

如果是单纯的数据或文本文件的按行读取和显示的话,使用 awk 命令比较方便.

3.使用 for var in file 命令完成

for var in file 表示变量 var 在 file 中循环取值.取值的分隔符由$IFS 确定.

1 for line in $(cat data.dat)
2 do 
3     echo "File:${line}"
4 done
5 
6 for line in `cat data.dat`
7 do 
8     echo "File:${line}"
9 done

如果输入文本每行中没有空格,则 line 在输入文本中按换行符分隔符循环取值.

如果输入文本中包括空格或制表符,则不是换行读取,line 在输入文本中按空格分隔符或制表符或换行符特环取值.

可以通过把 IFS 设置为换行符来达到逐行读取的功能.

IFS 的默认值为:空白(包括:空格,制表符,换行符).

转载自 http://www.cnblogs.com/dwdxdy/archive/2012/07/25/2608816.html


Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Shell 脚本逐行处理文本文件
喜欢 (0)
admin
关于作者:

您必须 登录 才能发表评论!