![]() |
Hei og Velkommen fra USA til UNIX og Linux Forums! Takk for besøket og Delta i vårt globale samfunn.
|
|
google unix.com
|
|||||||
| Forums | Registrer | Forum Rules | Lenker | Album | FAQ | Medlemsliste | Kalender | Søke | Dagens innlegg | Marker forumene som lest |
| Shell programmering og Skripting Post spørsmål om ksh, csh, SH, Bash, Perl, PHP, SED, awk og ANDRE shell scripts og Shell skriptespråk her. |
Mer UNIX og Linux Forum Emner Du kan finne nyttig
|
||||
| Tråd | Tråd startet | Forum | Svar | Siste innlegg |
| Ikke i stand til å sette inn data via crontab | megh | Sun Solaris | 2 | 12-29-2008 08:36 |
| Ikke i stand til å sette inn data | megh | Sun Solaris | 1 | 12-05-2008 12:20 |
| ikke Sett inn data fra. dat filen til. xls Kan noen hjelpe meg | kreddy2003 | Shell programmering og Skripting | 1 | 05-28-2008 06:33 |
| hjelpe meg til å sette inn data | babu @ shell | UNIX for Dummies Spørsmål og svar | 10 | 10-24-2006 03:25 |
| sed, sette inn data fra en fil til en annen? | ctcuser | Shell programmering og Skripting | 4 | 05-03-2005 02:43 |
![]() |
|
|
LinkBack | Thread Tools | Søk i denne tråden | Rate Thread | Visningsmoduser |
|
|
|
||||
|
Hvordan sette inn data befor noen feltet i en rad med data avhengig opp verdier i raden
Hei
Jeg trenger å gjøre noen ting som "finne og sette før at" i en fil som inneholder mange poster. Dette vil være klare med følgende eksempel. Den opprinnelige dataene posten bør være noen ting som dette Code:
60119827 RTMS_LOCATION_CDR INSTANT_POSITION_QUERY 1236574686123083rtmssrv7 20090309102806279 441 442
783 WEB 1568 GMLC919443259137 FAILURE6 1236574665595654lessrv1
Code:
60119827 RTMS_LOCATION_CDR INSTANT_POSITION_QUERY 1236574686123083rtmssrv7 20090309102806279 442
783 WEB 1568 GMLC919443259137 FAILURE6 1236574665595654lessrv1
Jeg trenger å sette inn 441 akkurat i denne stillingen hvis 442 er tilgjengelig som neste data. sin noe slikt tilfelle utsagn ... Jeg skal ha forskjellige verdier i stedet for 442 og tilhørende tidligere data om posisjon Hvordan går om dette ... alle ettall hjelpe meg ut ... Am ha masse feil filer som dette skal behandles, kan derfor jeg gjøre noe lignende laste opp i en DB og sette inn data basert på verdiene i raden ved posisjonen jeg sa før (442) Hjelp meg! |
|
|||||
|
Hei,
Som det ble sagt, du virkelig trenger å definere et mønster / struktur for arkiv inkludert nøyaktig feltet tallene der data skal endres eller i det minste en gruppe av bestemte verdier i henhold til hvilke manuset har å søke filen og legge til hva som mangler. Bare for å gi deg en første idé, hvis verdier er 441 og 442, så kan følgende KornShell skriptet vil gjøre jobben Code:
#!/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
Men dette fungerer bare hvis den skilletegn i filen er standardverdiene for IFS som er, \ n \ t og ''. Hilsen, ![]() |
|
||||
|
Hei
Den fungerer, men det er omstillingen i dataene mellomrom. Eksisterende data stillingene bør ikke bli forstyrret, og antall tegn 248 bør opprettholdes i resultatet også Det blir tomt mellomrom på slutten av hver linje og mellom data i tillegg. den tomme plassen indiactes det er ingen data for dette feltet. Egentlig er det enkelte felt navn som rapportene er generert, hvis dette feltet ikke er tilgjengelig i rapporten vil det være mellomrom for å nevne det. Jeg trenger å opprettholde lengden 248 tegn. Siden denne filen vil bli sendt for formatering til ulike format i en annen server. Slik at data skal være intakt. det må være 11 tomt mellomrom etter tidsstempelet: 20090309102806279 Etter det jeg må sette inn 441 hvis 442 er til stede. |
|
|||||
|
Det er veldig vanskelig i skriptet skallet å manipulere linje med mellomrom ... Prøv denne koden og starte det slik:. / Myscript infile outfile
Anta verdi 441/442 på posisjonene 116 og 130. Hvis noen linjer inneholder et # tegn, endre det i manuset med en annen ikke-brukt karakter. Code:
#!/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
|
![]() |
| Hugseliste |
| Thread Tools | Søk i denne tråden |
| Visningsmoduser | Ranger denne tråden |
|
|