在Bash中循环浏览文件内容

如何使用Bash遍历文本文件的每一行

使用此脚本:

回显“开始!”
对于p in(peptides.txt)
做
回显“${p}”
完成

我在屏幕上得到以下输出:

开始!
./runPep.sh:第3行:意外标记“(”附近的语法错误
./runPep.sh:第3行:`for p in(peptides.txt)'

(稍后我想用$p做一些比只输出到屏幕更复杂的事情。)


环境变量SHELL为(来自env):

SHELL=/bin/bash

/bin/bash--version输出:

GNUBash,版本3.1.17(1)-发布(x86_64-suse-linux-GNU)
版权所有(C)2005免费软件基金会。

cat/proc/version输出:

Linux版本2.6.18.2-34-default([email protected])(gcc版本4.1.2 20061115(预发布)(SUSE Linux))#1 SMP周一11月27日11:46:27 UTC 2006

文件peptides.txt包含:

RKEKNVQ
IPKKLQK
QYFHQLEKMNVK
IPKKLQK
GDLSTALEVAIDCYEK
QYFHQLEKMNVKIPENIYR
RKEKNVQ
弗拉赫格克丹
ILGFMK
莱德瓦基尔

一种方法是:

阅读时执行
回声“$p”
done<peptides.txt

正如评论中所指出的,这会产生一些副作用,如修剪前导空格、解释反斜杠序列,以及在缺少终止换行符时跳过最后一行。如果存在这些问题,您可以执行以下操作:

而IFS=”“read-r p | |[-n“$p”]
做
printf'%s\n'$p'
done<peptides.txt

例外情况下,如果循环体可以从标准输入读取,则可以使用不同的文件描述符打开文件:

读取时-u 10 p;执行
...
完成10<肽.txt

这里,10只是一个任意数(不同于0、1、2)

发表评论