用下划线连接文件的每一行

用下划线连接文件的每一行

我有一个输入文件,其名称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_sapiensMus_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

相关内容