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

admin5个月前笔记101

经常会对文体文件进行逐行处理,在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的默认值为:空白(包括:空格,制表符,换行符).


相关文章

ChatGPT的5种有趣用途,您可能不知道

ChatGPT的5种有趣用途,您可能不知道

ChatGPT是一款功能强大的语言模型,它可以进行自然语言处理,帮助您解决各种问题。除了传统的聊天机器人,ChatGPT还可以用于很多其他有趣的用途,让您大开眼界。在文章中,我们将介绍5种您可能不知道...

5 个 JavaScript 调试技巧

5 个 JavaScript 调试技巧

之前使用过用printf debugging,自此之后我用这种方法似乎总能更快地解决bug。 在某些情况下需要更好的工具,下面是其中的一些佼佼者,我敢肯定你会发现它们的有用之处:1. debugger...

谷歌的原生多模态大模型Gemini来了,剑指GPT-4

谷歌的原生多模态大模型Gemini来了,剑指GPT-4

就在刚刚,谷歌扔下“震撼弹”。北京时间2月21日晚21点,美国科技巨头谷歌(Google)宣布推出全球性能最强大、轻量级的开源模型系列Gemma,分为2B(20亿参数)和7B(70亿)两种尺寸版本,2...

让 Linux 保持精确时间

如何保持正确的时间,如何使用 NTP 和 systemd 让你的计算机在不滥用时间服务器的前提下保持同步。它的时间是多少?让 Linux 来告诉你时间的时候,它是很奇怪的。你可能认...

SSH 隧道

SSH 隧道

1. 什么是 SSH 隧道SSH 隧道是 SSH 中的一种机制,它能够将其他 TCP 端口的网络数据通过 SSH 连接来转发,并且自动提供了相应的加密及解密服务。因为 SSH 为其他 TCP 链接提供...

一键搭建web版chatGPT,无需魔法,国内可用

一键搭建web版chatGPT,无需魔法,国内可用

在GitHub上有很多web版本的ChatGPT项目,感谢这些开源作者,我们能很方便的搭建属于自己的ChatGPT。前置条件需要拥有chatGPT的api key。申请地址platform.opena...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。