![]() |
|
|
google unix.com
|
|||||||
| Fóruns | Registar | Fórum Regimento | Ligações | Álbuns | FAQ | Lista deputados | Calendário | Pesquisa | Today's Posts | Mark Forums Read |
| Programação Shell Script e Post perguntas sobre ksh, CSH, SH, BASH, Perl, PHP, SED, Awk e outros scripts shell e shell scripts línguas aqui. |
Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
|
||||
| Fio | Thread Starter | Fórum | Respostas | Última postagem |
| Não é possível inserir dados através do crontab | Megh | Sun Solaris | 2 | 12-29-2008 08:36 |
| Não é possível inserir dados | Megh | Sun Solaris | 1 | 12-05-2008 12:20 |
| incapaz Inserir os dados de arquivo. dat para. xls alguém pode me ajudar | kreddy2003 | Programação Shell Script e | 1 | 05-28-2008 06:33 |
| para me ajudar a inserir dados | Babu @ shell | UNIX para Dummies Perguntas & Respostas | 10 | 10-24-2006 03:25 |
| sed, insira os dados de um arquivo para outro? | ctcuser | Programação Shell Script e | 4 | 05-03-2005 02:43 |
![]() |
|
|
Linkback | Thread Tools | Pesquisar este Thread | Rate Thread | Display Modes |
|
|
|
||||
|
Como inserir alguns dados antes da sua área em uma linha de dados em função de valores na linha
Oi
Eu preciso fazer alguma coisa como "encontrar e inserir antes que" em um arquivo que contém muitos registros. Isso será evidente com o seguinte exemplo. Os dados originais registro deve ser alguma coisa como esta Código:
60119827 RTMS_LOCATION_CDR INSTANT_POSITION_QUERY 1236574686123083rtmssrv7 20090309102806279 441 442
783 WEB 1568 GMLC919443259137 FAILURE6 1236574665595654lessrv1
Código:
60119827 RTMS_LOCATION_CDR INSTANT_POSITION_QUERY 1236574686123083rtmssrv7 20090309102806279 442
783 WEB 1568 GMLC919443259137 FAILURE6 1236574665595654lessrv1
Preciso inserir 441 exatamente em que posição se 442 está disponível na próxima dados. sua alguma coisa caso declarações ... Vou ter valores diferentes, em vez de 442 e sua correspondente posição anterior dados Como ir sobre isto ... qualquer um ajudar-me ... Estou tendo muitos arquivos de erro como esta para ser tratada, e daí que eu posso fazer qualquer coisa como fazer upload de um PO e inserir os dados com base nos valores da linha na posição eu disse antes (442) Ajuda-me para fora! |
|
|||||
|
Olá,
Como foi dito, você realmente tem que definir um padrão / estrutura para o seu arquivo, incluindo os números exatos campo onde os dados são supostos para ser modificado ou, pelo menos, um grupo de valores específicos, segundo a qual o script tem de procurar o ficheiro e adicionar o que está faltando. Só para lhe dar uma primeira ideia, se os valores específicos são 441 e 442 e, em seguida, a seguinte KornShell script irá fazer o trabalho Código:
#!/bin/ksh
RESULT=""
while read LINE
do
for ITERATOR in $LINE
do
if [[ $ITERATOR = "442" ]]
then
RESULT="$RESULT 441 $ITERATOR"
else
RESULT="$RESULT $ITERATOR"
fi
done
RESULT="$RESULT\n"
done < $1
print "$RESULT" > $1
No entanto, isso funciona se e somente se os delimitadores no seu arquivo são os valores padrão para IFS isto é, \ n \ t e ''. Atenciosamente, ![]() |
|
|||||
|
Citação:
$. / Myscript.ksh myfile |
|
||||
|
Oi
O seu trabalho, mas há realinhamento nos dados espaçamento. Os dados existentes posições não deve ser perturbada e 248 o número de caracteres devem ser mantidas no resultado demasiado Haverá espaços em branco no final de cada linha e, entre os dados tão bem. o espaço em branco indiactes não há dados para esse campo. Na verdade, existem alguns nomes de domínio que os relatórios são gerados, se o campo não está disponível no relatório, haverá espaço para falar isso. Preciso manter o comprimento 248 caracteres. Uma vez que este arquivo será enviado para a formatação formato diferente em outro servidor. Portanto, os dados tem que estar intacto. Deve haver 11 espaços em branco após a hora: 20090309102806279 depois que eu preciso inserir o 441 se 442 está presente. |
|
|||||
|
É muito difícil, em shell script para manipular a linha com espaços ... Tente este código, e lançá-la como:. / Myscript infile OUTFILE
Assumir valor 441/442 em posições 116 e 130. Se algumas linhas contém um caractere #, alterá-la no script com outro personagem não-utilizadas. Código:
#!/bin/ksh
POS1=116 ; VAL1=441
POS2=130 ; VAL2=442
VAL_LEN=3
XPOS1=$((POS1 + $VAL_LEN - 1))
XPOS2=$((POS2 + $VAL_LEN - 1))
echo POS1=$POS1,XPOS1=$XPOS1
echo POS2=$POS2,XPOS2=$XPOS2
infile=$1
outfile=$2
NBL=$(wc -l $infile)
NBC=0
while [ $NBC -lt $NBL ]
do
(( NBC = NBC + 1 ))
xval1=$(head -$NBC $infile | tail -1 | cut -b$POS1-$XPOS1)
xval2=$(head -$NBC $infile | tail -1 | cut -b$POS2-$XPOS2)
if [ "$xval2" = "$VAL2" ]
then
if [ "$xval1" = "$VAL1" ]
then
head -$NBC $infile | tail -1 >> $outfile
else
# Must replace with $VAL1
echo "Must replace on line "$NBC
k1=$(head -$NBC $infile | tail -1 | sed 's/ /#/g')
(( ZPOS1 = POS1 - 1 ))
k2=$(echo $k1 | cut -b1-$ZPOS1)
(( ZPOS1 = XPOS1 + 1 ))
k3=$(echo $k1 | cut -b$ZPOS1-)
echo "${k2}${VAL1}${k3}" | sed 's/#/ /g' >> $outfile
fi
else
head -$NBC $infile | tail -1 >> $outfile
fi
done
|
![]() |
| Marcadores |
| Thread Tools | Pesquisar este Thread |
| Display Modes | Esta taxa Thread |
|
|