如何使用Bash遍历文本文件的每一行(https://en.wikipedia.org/wiki/Bash_(Unix_shell%29)?
使用此脚本:
echo "Start!"
for p in (peptides.txt)
do
echo "${p}"
done
我在屏幕上看到下面的输出:
Start!
./runPep.sh: line 3: syntax error near unexpected token `('
./runPep.sh: line 3: `for p in (peptides.txt)'
(稍后,我想用$p
做一些更复杂的事情,而不仅仅是输出到屏幕上。)
环境变量外壳为(来自环境):
SHELL=/bin/bash
/bin/bash --version
输出:
GNU bash, version 3.1.17(1)-release (x86_64-suse-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
cat /proc/version
输出:
Linux version 2.6.18.2-34-default (geeko@buildhost) (gcc version 4.1.2 20061115 (prerelease) (SUSE Linux)) #1 SMP Mon Nov 27 11:46:27 UTC 2006
文件peptides.txt包含:
RKEKNVQ
IPKKLLQK
QYFHQLEKMNVK
IPKKLLQK
GDLSTALEVAIDCYEK
QYFHQLEKMNVKIPENIYR
RKEKNVQ
VLAKHGKLQDAIN
ILGFMK
LEDVALQILL
发布于 2009-10-05 18:00:20
一种方法是:
while read p; do
echo "$p"
done <peptides.txt
正如注释中所指出的,这有一些副作用,如修剪前导空格、解释反斜杠序列以及如果最后一行缺少终止换行符则跳过它。如果您关心这些问题,您可以这样做:
while IFS="" read -r p || [ -n "$p" ]
do
printf '%s\n' "$p"
done < peptides.txt
例外情况下,如果是loop body may read from standard input,则可以使用不同的文件描述符打开文件:
while read -u 10 p; do
...
done 10<peptides.txt
这里,10只是一个任意的数字(不同于0,1,2)。
发布于 2009-10-05 17:54:39
cat peptides.txt | while read line
do
# do something with $line here
done
还有一行的变体:
cat peptides.txt | while read line; do something_with_$line_here; done
如果没有尾随换行符,这些选项将跳过文件的最后一行。
您可以通过以下方法来避免这种情况:
cat peptides.txt | while read line || [[ -n $line ]];
do
# do something with $line here
done
发布于 2009-10-05 18:18:47
选项1a: While循环:一次一行:输入重定向
#!/bin/bash
filename='peptides.txt'
echo Start
while read p; do
echo "$p"
done < "$filename"
循环选项1b: While :单行:
打开文件,从文件描述符(在本例中为文件描述符#4)中读取。
#!/bin/bash
filename='peptides.txt'
exec 4<"$filename"
echo Start
while read -u4 p ; do
echo "$p"
done
https://stackoverflow.com/questions/1521462
复制相似问题