PHP2ShellScript [RESOLVIDO]

1. PHP2ShellScript [RESOLVIDO]

Ednaldo Teixeira da Silva
ed_teixeira

(usa RedHat)

Enviado em 20/03/2012 - 11:41h

Pessoal,

Faço scripts em PHP para resolver alguns problemas de genética aqui no nosso instituto. Participei de uma palestra do Júlio Neves, fiquei surpreso com o poder do Shell Script. Hoje acredito que, mesmo gostando muito da PHP e a uso com frequência em scripts web, o Shell Script seria mais rápido para todas rotinas que temos aqui no nosso laboratório de bioinformática.

Resolvi então mandar um script "teste" em php para ser reescrito em shell script. Alguém poderia fazer essa gentileza?
Segue o script em php:


<?php
error_reporting(E_ALL);
$splits_handle = fopen("texto.txt", "r");
while (!feof($splits_handle)) {
$line = rtrim(fgets($splits_handle));
if ($line != "") {
if (isset($splits[$line])) $splits[$line] ++;
else $splits[$line] = 1;
}
}
foreach ($splits as $key => $valor){
echo $key ."=>".$valor."\n";
}
fclose($splits_handle);
?>


Dentro do arquivo "texto.txt" tem uma coluna de letras aleatórias (ACTGGTACGTATGCA....) eu preciso saber a quantidade de cada letra presente no arquivo.

Agradeço demais se alguém mandar esse script em Shell, terei uma noção do quão é valida a mudança de PHP para Shell Script.


  


2. MELHOR RESPOSTA

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 20/03/2012 - 19:04h

awk '{ print $1 }' texto.txt | sed 's/./& /g' | xargs -n 1 | sort | uniq -c

3. Re: PHP2ShellScript [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 20/03/2012 - 11:53h


<?php
error_reporting(E_ALL);
$splits_handle = fopen("texto.txt", "r");
while(!feof($splits_handle)){
$line = rtrim(fgets($splits_handle));
if($line != ""){
if(isset($splits[$line])) $splits[$line]++;
else $splits[$line] = 1;
}
}
foreach ($splits as $key => $valor){
echo $key ."=>".$valor."\n";
}
fclose($splits_handle);
?>


Só pra ficar mais visível.


4. ao rei_astro

Ednaldo Teixeira da Silva
ed_teixeira

(usa RedHat)

Enviado em 20/03/2012 - 12:10h

Mil desculpas amigo,

Nunca postei aqui, daí presumi que usando o <code></code> funcionaria. Acredito que vou utilizar este fórum por muito, mas muito tempo mesmo, já que estou decidindo pelo Shell Script, então seria possível você me ensinar como limito o código.

Obrigado


5. Re: PHP2ShellScript [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 20/03/2012 - 17:54h

As tags aqui são entre colchetes: ['code'] ['/code']

Sem a aspas. Só as coloquei pra ficar visível.


6. Re: PHP2ShellScript [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 20/03/2012 - 18:19h


#!/bin/bash
# package http://sekysu.blogspot.com
# - Uma tradução de um script php
#
# file translateFromPhp.sh
#
# since 2012-03-20 18:15 (GMT -03:00)
#
# license GPL v2.0
# charset UTF-8
# endofline Linux
# system GNU bash, version 3.1.17(2)-release i486 slackware 12.2
# autor Paulo Riceli Dias Lelis [ http://sekysu.blogspot.com ]
#
OIFS=$IFS
IFS=$(echo -e "\n")
COUNTER=1

while read LINES
do
if [ ${#LINES} -gt 0 ]
then
echo "${COUNTER} => ${LINES}"
let COUNTER=COUNTER+1
fi
done < texto.txt

IFS=$OIFS




7. Re: PHP2ShellScript [RESOLVIDO]

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 20/03/2012 - 18:35h

Este script deve ser executado com um parâmetro, sendo ele a letra que vc deseja encontrar. Ao final, vc receberá se a letra existe ou não no arquivo e o número de vezes que a mesma apareceu. Caso você não inclua um parâmetro, o script lhe avisará para digitar:



#!/bin/bash
if [ -z $1 ]; then

echo "Deve-se escolher uma letra"
exit 1

fi

array=( ${array[@]} `cat arquivo.txt` )
TAM=$(echo ${#array})

j=0
while [ $j -le $TAM ]
do

echo ${array:$j:1} | grep $1 &> /dev/null
if [ $? -eq 0 ]; then

let k++

fi
let j++

done

test ! -z $k && echo "A letra $1 apareceu $k vezes" || echo "A letra $1 nao consta no arquivo"



Exemplo para vc usar:

$ ./script.sh A
A letra A apareceu 4 vezes

$ ./script.sh B
A letra B nao consta no arquivo

$ ./script.sh T
A letra T apareceu 3 vezes


8. Re: PHP2ShellScript [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 20/03/2012 - 18:36h

No link abaixo você poderá ler uma explicação um pouco mais detalhada do que foi usado neste script.

http://sekysu.blogspot.com.br/2012/02/como-ler-um-arquivo-linha-por-linha-em.html

BOA SORTE!!!


9. Re: PHP2ShellScript [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 20/03/2012 - 20:05h


#!/bin/bash
#
# Uso $0 [letra] [arquivo]
# saida [linha];[ vezes que aparece ]
#
# system GNU bash, version 3.1.17(2)-release i486 slackware 12.2
# autor Paulo Riceli Dias Lelis [ http://sekysu.blogspot.com ]
#


function _counterChars()
{
echo $1 |
sed "s/[^$2]//g" |
wc -m |
sed 's/[^0-9]//g'
}

function _fileExists()
{
if [ -r $1 ]
then
echo $1
else
kill -s 15 $$
fi
}

if [ ! -z $1 ] && [ ! -z $2 ]
then
OIFS=$IFS
IFS=$( echo -e "\n" )

INPUT_ARQ=$( _fileExists $2 )
SEARCHE=$1

COUNTER=0

while read LINE
do
let COUNTER=COUNTER+1
if [ ${#LINE} -gt 0 ]
then
LEN=$(( $( _counterChars $LINE $SEARCHE ) - 1 ))
if [ ${LEN} -gt 0 ]
then
echo "${COUNTER};${LEN}"
fi
fi
done < $INPUT_ARQ
IFS=$OIFS
fi


O exemplo abaixo retornaria apenas as linhas com exactamente 5 letras A

script.sh A texto.txt | grep ';5'







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts