我有一个输入文件,其名称test.txt
如下:
Homo sapiens
Mus musculus
Rat rattus rattus
我想for
在这里使用循环并循环遍历每一行。像这样的事情:
for i in "`cat test.txt`"
do
fn=store_name
do something else > ${fn}.txt
done
由于每行名称之间都有一个空格,因此我在cat test.txt
.我想创建一个附加在这些行名称之间的变量fn
,_
这样我fn
就变成了Homo_sapiens
,Mus_musculus
如果我有Rat rattus rates
它就变成了Rat_rattus_rattus
我怎样才能实现这个目标?
答案1
用于tr
将空格音译为下划线:
while read line
do
echo ${line} | tr -s " " "_"
done < test.txt
Homo_sapiens Mus_musculus Rat_rattus_rattus
答案2
使用awk
:
awk '{OFS="_";}{$1=$1; print}' test.txt
使用循环:
while read -r line; do
line=${line// /_}
command using "$line"
done<test.txt
答案3
我将sed
通过循环使用并读取其输出:
sed 's/[[:space:]]\+/_/g' test.txt | while IFS= read -r line; do
process "$line" however
done > some.output.file
答案4
有人给出了答案t还有人给了一个awk,现在介绍如何做到这一点sed:
for i in "`cat test.txt`"
do
fn="$(echo "$i" |sed -e 's/ /_/g')"
'do something else' > $fn.txt
done