linux按行读取 (while read line与for-loop)
2022/9/9 5:23:28
本文主要是介绍linux按行读取 (while read line与for-loop),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
转自: linux按行读取 (while read line与for-loop)
在linux下一般用while read line与for循环按行读取文件。现有如下test.txt文件:
1. while read line
while read line; do echo $line done < test.txt
输出结果与上图一致。
这里也可以写为:
cat test.txt | while read line; do echo $line done
输出结果一致,但是需要注意一点,就是在如下情况下结果是不同的:
# 第一种情况 while read line; do name1=$line; done < test.txt echo $name1 # 第二种情况: cat test.txt | while read line; do name2=$line done echo $name2
在第一种情况下输出:
ENSMUSG00000000078.7 32.83699 29.78868 38.58607 30.348110000000002
第二种情况则无输出。
出现这种不同,是因为管道的机制,这个使用管道之后while read line是在子shell中进行的,所以退出之后$name2就没有值了。并且,cat 会一次性地把test.txt的所有内容都输入到内存,假如文件很大,则会占用很大的内存。但是第一种重定向的方法,是一行一行的读入,更省内存。
2. for循环
for i in `cat test.txt`;do echo $i done
但是输出了这样的结果(部分结果):
这是因为,在for循环中,每次是以空格/制表符为分割符输出。可以写成以下形式输出:
# 可以先将空格转为别的字符 for i in `sed 's/\t/#/g' test.txt`;do echo $i | sed 's/#/\t/g' done
先将空格或者制表符替换为其他字符,输出的时候再替换回来即可
这篇关于linux按行读取 (while read line与for-loop)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法