Bash脚本:怎样一行行地读文件(最好和最坏的方法)

用bash脚本读文件的方法有很多。请看第一部分,我使用了while循环及其后的管道命令(|)(cat $FILE | while read line; do … ),并在循环当中递增 i 的值,最后,我得到了非我所想的 i 。主要的原因是,管道命令会发起子shell来读取文件,而任何在(子shell的)while循环中的操作(例如 i ++),都会随着子shell的结束而丢失。

而第二种,也是最坏的一种,其最明显的错误就是在读文件的过程中使用了for循环(for fileline in $(cat $FILE);do ..),这样每打印一个单词就换一次行,因为for循环使用空格作为默认的IFS。

完美的方法,即第三种的while循环(while read line;do …. done < $FILE) 是最合适且最简单的一行行地读文件的方法。请看以下例子。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Input: $ cat sample.txt
This is sample file
This is normal text file
Source: $ cat readfile.sh
#!/bin/bash
i=1;
FILE=sample.txt
# Wrong way to read the file.
# This may cause problem, check the value of 'i' at the end of the loop
echo "###############################"
cat $FILE | while read line; do
        echo "Line # $i: $line"
        ((i++))
done
echo "Total number of lines in file: $i"
# The worst way to read file.
echo "###############################"
for fileline in $(cat $FILE);do
        echo $fileline
done
# This is correct way to read file.
echo "################################"
k=1
while read line;do
        echo "Line # $k: $line"
        ((k++))
done < $FILE
echo "Total number of lines in file: $k"
Output: $ ./readfile.sh
###############################
Line # 1: This is sample file
Line # 2: This is normal text file
Total number of lines in file: 1
###############################
This
is
sample
file
This
is
normal
text
file
################################
Line # 1: This is sample file
Line # 2: This is normal text file
Total number of lines in file: 3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447516.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决:无法获取实体类com.xxx.xx.xx.xx.dto.XxxDTO对应的表名

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.报错如题&#xff1a; 无法获取实体类com.xxx.xx.xx.xx.dto.XxxDTO对应的表名 2. 报错原因&#xff0c;如下图红框中部分&#xff0c…

IDEA 查看最近修改、已提交文件

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 如图&#xff1a;点击 Version Control --> Repository --> 最左边蓝色圆圈 --> 选择一条提交日志&#xff1a;右边就…

程序员赚钱致富的6种方法

我认识一个朋友&#xff0c;也是程序员出身&#xff0c;他在一家还不错的外企上班&#xff0c;每个月工资收入也就差不多15K&#xff0c;五年的工作经验了&#xff0c;在他面前&#xff0c;我算是小弟。那天我们几个朋友一起打完球就去附近的饭馆吃饭&#xff0c;环境还不错&am…

解决:Changes not staged for commit:

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. git push 报错&#xff1a; 2. 提交时加上参数&#xff1a;-a &#xff0c;表示新增。 git commit -am "提交说明" 提交成…

内存不足:杀死进程还是牺牲子进程

早上6点&#xff0c;我不得不开始处理“叫醒”我的一些问题。因为当这些问题发生的时候&#xff0c;我的手机铃声响了。昏睡中的我非常不情愿地拿起了手机&#xff0c;检查我是否疯狂到将叫醒闹钟设在了早上5点。原来是监控系统发现一个Plumbr服务死掉了。 作为一名该领域经验…

java8 注解: @FunctionalInterface (函数式接口)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Java8提倡函数式编程&#xff0c;因而新增了一个函数式接口。函数式接口保证了函数式编程&#xff0c;同时也保证了能够兼容以前的java版…

写给年轻程序员的一封信

很多年轻的程序员发emails给我&#xff0c;说希望能够得到一些如何尽快跻身优秀程序员行列的建议和方法。关于这个问题&#xff0c;我已经有提到过很多次&#xff0c;现在已经没什么可以补充的了。不过 为了满足大家的要求&#xff0c;在这里我再详细地归纳总结一下&#xff1a…

Docker中RocketMQ的安装与使用

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 搜索RocketMQ的镜像&#xff0c;可以通过docker的hub.docker.com上进行搜索&#xff0c;也可以在Linux下通过docker的search命令进行搜索…

大浪淘沙:不是所有的IT公司都以成功收场

本文列举了50家创业公司没有什么先后顺序&#xff0c;最后显示&#xff0c;其中21家是独立公司&#xff0c;19家被收购了&#xff0c;4家正在走下坡路&#xff0c;6家已倒闭。但是我希望有更多的公司彻底倒闭&#xff0c;留下实力最强大的公司。公司倒闭也许是重新开始的标志。…

解决:阿里云ECS服务器 远程连接不上、极慢 (主机监控的实现)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 个人低配版的阿里云ECS服务器&#xff0c;突然发现用 Xshell 或者 git-bash 都连接不上... 第一反应发工单去问下为什么&#xff0c;然…

TIOBE 2014年7月编程语言排行榜:仅发布1月,Swift进Top 20!

摘要&#xff1a;TIOBE7月编程语言排行榜发布&#xff0c;本月最值得关注的是&#xff0c;苹果公司在WWDC 2014上推出新的编程语言Swift&#xff0c;发布至今仅一月有余&#xff0c;Swift竟挤进TIOBE排行榜的Top 20&#xff0c;排名第16位。Swift能取得如此骄人的成绩&#xff…

Math对象方法总结(向上取整、向下取整、四舍五入、取随机数,取最大值、取最小值)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。

Docker 方式安装 gitlab ( 阿里云ECS )

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.查找镜像&#xff1a; docker search gitlab 2. 拉取镜像&#xff1a; docker pull 镜像名 我选择的是搜索出来的第一个镜像&…

商用的码流分析工具/YUV viewer

目前市场上有一些商用的码流分析工具是比较好的&#xff0c;能够辅助我们进行各个标准的码流分析&#xff1a; 1. Elecard StreamEye系列 可以分析H264/MPEG4/MPEG2的码流&#xff0c;暂时不支持其它标准。 2. H264VISA 比较好的H264码流分析工具 3. Vegas vegas是interra s…

生成多个 SSH-Key 、生成多个公钥和私钥

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 当有多个仓库要同时使用时&#xff0c;需要配置多个公钥、私钥。于是就要先生成多个。 PS&#xff1a;初次生成参见文章&#xff1a;查…

使用Lucid Virtu在有独立显卡的情况下使用Intel硬件加速H.264编码

在硬编码领域&#xff0c;大家都知道CUDA技术对于H.264视频编码速度的提升。然而实际上常见的高清H.264视频压缩都不是用CUDA技术进行硬编码&#xff0c;而是用传统的x264进行软编码&#xff0c;因为通过CUDA硬编码的视频效果远远差于x264软编码压缩出的视频效果。随着Intel Sa…

执行ssh-add时出现Could not open a connection to your authentication agent

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 若执行ssh-add /path/to/xxx.pem是出现这个错误:Could not open a connection to your authentication agent&#xff0c;则先执行如下命…

Intel硬件加速 VS CUDA完胜 视频转码感受

对比试用平台介绍 在体验了酷睿 I5 2300 在3D游戏和多任务、高清播放等方面的突出性能后&#xff0c;今天我利用空闲时间针对酷睿 I5 2300在高清转码方面上与本人的旧平台上对比了一下.&#xff0c;其结果也让人感到震撼。好了闲话不多说了&#xff0c;先来给自己新旧PC做个介绍…

解决 : Shell 脚本 $‘\r‘: command not found 问题

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.经查证&#xff0c;只是 Windows 的空行在 linux 中不识别&#xff0c;故需要用 dos2unix 来转换。 2. 安装 dos2unix&#xff0c;2 …

H.264 软/硬编码器 画质量化分析评测

第1页&#xff1a;前言——视频压缩无处不在H.264 或者说 MPEG-4 AVC 是目前使用最广泛的高清视频编码标准&#xff0c;和上一代 MPEG-2、h.263/MPEG-4 Part4 相比&#xff0c;它的压缩率大为提高&#xff0c;例如和 MPEG-2 相比&#xff0c;同样的压缩后画面品质&#xff0c;h…