ファイルの各行を下線で連結します。

ファイルの各行を下線で連結します。

次の名前の入力ファイルがあります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_fnHomo_sapiensMus_musculusRat rattus ratesRat_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

誰かが答えを与えました。ティー他の人がくれました。アッ、今どうすればいいですか?sed:

for i in "`cat test.txt`"
do
    fn="$(echo "$i" |sed -e 's/ /_/g')"
    'do something else' > $fn.txt
done

関連情報