Use tr
para transliterar um espaço para um sublinhado:
while read line
do
echo ${line} | tr -s " " "_"
done < test.txt
Homo_sapiens Mus_musculus Rat_rattus_rattus
Eu tenho um arquivo de entrada chamado test.txt
assim:
Homo sapiens
Mus musculus
Rat rattus rattus
Eu quero usar um loop for
aqui e percorrer cada linha. Alguma coisa assim:
for i in "'cat test.txt'"
do
fn=store_name
do something else > ${fn}.txt
done
Como cada linha tem um espaço entre os nomes, usei aspas duplas em cat test.txt
. Eu quero fazer uma variável fn
que atribui _
entre esses nomes das linhas, então meu fn
se torna Homo_sapiens
e Mus_musculus
e se eu tiver Rat rattus rates
, ele se torna Rat_rattus_rattus
Como posso conseguir isso?
Use tr
para transliterar um espaço para um sublinhado:
while read line
do
echo ${line} | tr -s " " "_"
done < test.txt
Homo_sapiens Mus_musculus Rat_rattus_rattus
Usando awk
:
awk '{OFS="_";}{$1=$1; print}' test.txt
Usando um loop:
while read -r line; do
line=${line// /_}
command using "$line"
done<test.txt
Eu usaria sed
e leria sua saída com um loop:
sed 's/[[:space:]]\+/_/g' test.txt | while IFS= read -r line; do
process "$line" however
done > some.output.file
Aqui está um loop rápido que usa sed para fazer isso:
for file in $(sed "s/ /_/g" test.txt); do echo "test" > $file; done
Apenas substitua o comando echo por qualquer coisa que você queira fazer.
Eu uso comandos como esse o tempo todo, embora o dia todo.
Alguém deu uma resposta com tr e outra pessoa deu uma com awk , eis como fazer isso com sed :
for i in "'cat test.txt'"
do
fn="$(echo "$i" |sed -e 's/ /_/g')"
'do something else' > $fn.txt
done