[转帖]linux按行读取 (while read line与for-loop)

linux,读取,while,read,line,for,loop · 浏览次数 : 0

小编点评

**使用 while read line** ```bash while read line; do echo $linedone done < test.txt ``` **使用 for循环** ```bash for i in $(cat test.txt); do echo $idone done ``` **测试结果** **使用 while read line** ``` 1 1 2 3 4 5 6 7 8 9 10 ``` **使用 for循环** ``` 1 2 3 4 5 6 7 8 9 10 ``` **解释** * `while read line; do` 和 `for i in $(cat test.txt); do` 都用于迭代文件内容并打印每个文件的编号。 * `while read line; do` 使用的是一个循环,它会遍历每个文件的内容。 * `for i in $(cat test.txt); do` 使用的是一个范围变量的循环,它会遍历文件的内容并将每个文件的内容打印到变量 `i` 中。 * `cat test.txt | while read line; do` 将文件内容一次性地读入内存,并使用 `while` 循环打印每个文件的内容。 * `for i in `cat test.txt` 使用的是一个范围变量的循环,它读取文件内容并将每个文件的内容打印到变量 `i` 中。然后,使用 `sed` 替换 `\t` 为其他字符。

正文

https://cloud.tencent.com/developer/article/1655435

 

在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)相似的内容:

[转帖]linux按行读取 (while read line与for-loop)

https://cloud.tencent.com/developer/article/1655435 在linux下一般用while read line与for循环按行读取文件。现有如下test.txt文件: 1. while read line while read line; do echo

[转帖]Linux shell 按行循环读入文件常用代码如下:

Linux shell 按行循环读入文件常用代码如下: #/bin/bash printf "*************************************\n" echo " cat file whiel read line" cat test.txt |while read line

[转帖]Linux常用命令:利用sed命令删除文件的特定行

http://www.dbs724.com/12806.html 前言 正常来说,我们想要删除文件中的某些行内容,一般都是先打开这个文件,然后找到要删除的内容,再然后选中这些行并按删除键进行删除,这在数据量很少时是没有问题的。但是,一旦文件中的行数据非常多,而且数据冗杂的情况下,你还要用上面的方法去

[转帖]Linux Shell sort排序常用命令

https://www.jianshu.com/p/75c69236963f 1 sort的工作原理 sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。 [rocrocket@rocrocket programming]$ ca

[转帖]Linux服务器上监控网络带宽的18个常用命令

https://www.pianshen.com/article/57221534801/ nload等一些工具可以读取"proc/net/dev"文件,以获得流量统计信息;而一些工具使用pcap库来捕获所有数据包,然后计算总数据量,从而估计流量负载。下面是按功能划分的命令名称。监控总体带宽使用――

[转帖]「Linux性能调优」磁盘I/O队列调度策略

https://zhuanlan.zhihu.com/p/450329513 傻瓜化说明 简单地说,对于磁盘I/O,Linux提供了cfq, deadline和noop三种调度策略 cfq: 这个名字是Complete Fairness Queueing的缩写,它是一个复杂的调度策略,按进程创建多个

[转帖]《Linux性能优化实战》笔记(十五)—— 磁盘IO的工作原理

前一篇介绍了文件系统的工作原理,这一篇来看看磁盘IO的工作原理 一、 磁盘 1. 按存储介质分类 磁盘是可以持久化存储的设备,根据存储介质的不同,常见磁盘可以分为两类:机械磁盘和固态磁盘。 机械磁盘,也称为硬盘驱动器(Hard Disk Driver,HDD),主要由盘片和读写磁头组成,数据存储在盘

[转帖]Linux性能优化(八)——网络测试工具

Linux性能优化(八)——网络测试工具 https://blog.51cto.com/u_9291927/2594146 一、ping 1、ping简介 PING是一个网络工具,用来测试与网络主机俄连通性。PING通过发送ICMP ECHO_REQUEST数据包到网络主机,并显示响应情况,程序会按

[转帖]Linux中find命令使用示例

https://zhuanlan.zhihu.com/p/99170116 Linux查找命令是类Unix操作系统中最重要且最常用的命令行实用程序之一。 查找命令可以根据你设定的参数匹配的文件指定的条件来搜索和查找文件或目录的列表。 查找可以在多种条件下使用,例如可以按权限,用户,组,文件类型,日期

[转帖]Linux 磁盘I/O 调度算法 说明

2022-08-23 13:031361转载Linux 1 Linux 4.0 IO协议栈框架图 I/O 调度算法在各个进程竞争磁盘I/O的时候担当了裁判的角色。他要求请求的次序和时机做最优化的处理,以求得尽可能最好的整体I/O性能。 Linux 4.0 IO协议栈框架图 I/O调度程序的总结 当向