阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Shell脚本逐行处理文本文件技巧

38次阅读
没有评论

共计 1192 个字符,预计需要花费 3 分钟才能阅读完成。

导读 本文主要给大家介绍了关于 Shell 脚本如何逐行处理文本文件的相关资料

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

1. 通过 read 命令完成.

read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量,用 IFS(内部字段分隔符)变量中的字符作为分隔符。VariableName(变量名)参数指定给每一个字段的值,由 VariableName(变量名)参数指定的以此类推,直到最后一个字段。

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

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

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

cat data.dat | while read line
do
 echo "File:${line}"
done
 
while read line
do
 echo "File:${line}"
done < data.dat
2. 使用 awk 命令完成

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

语法格式:awk [选项] ‘ 指令 ’ 操作文件

常用选项:-F 指定分隔符,分隔符用 ”” 引起来

-v:var=value 在 awk 程序开始之前指定一个值 valu 给变量 var,这些变量值用于 awk 程序的 BEGIN 快

-f:后面跟一个保存了 awk 程序的文件,代替在命令行指定 awk 程序
利用 awk 读取文件中的每行数据,并且可以对每行数据做一些处理,还可以单独处理每行数据里的每列数据.

cat data.dat | awk '{print $0}'

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 确定.

for line in $(cat data.dat)
do
 echo "File:${line}"
done
 
for line in `cat data.dat`
do
 echo "File:${line}"
done

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

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

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

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

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计1192字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中