![]() |
Hallo und herzlich Willkommen aus den Vereinigten Staaten, die UNIX-und Linux-Foren! Vielen Dank für Ihren Besuch und die Teilnahme an unserem Global Community.
|
|
Google unix.com
|
|||||||
| Foren | Registrieren | Forum-Regeln | Links | Alben | FAQ | Benutzerliste | Kalender | Suche | Die heutige Beiträge | Alle Foren als gelesen markieren |
| Shell Programmierung und Scripting Post Fragen zu ksh, csh, sh, bash, Perl, PHP, sed, awk und anderen Shell-Skripte und Shell-Scripting-Sprachen hier. |
Mehr UNIX-und Linux-Forum Themen Vielleicht finden Sie hilfreiche
|
||||
| Faden | Thread Starter | Forum | Antworten | Last Post |
| Nicht in der Lage, um Daten über crontab | megh | SUN Solaris | 2 | 12-29-2008 08:36 AM |
| Nicht in der Lage, um Daten | megh | SUN Solaris | 1 | 12-05-2008 12:20 AM |
| Legen Sie nicht in der Lage Daten aus. dat-Datei zu. xls kann jemand mir helfen | kreddy2003 | Shell Programmierung und Scripting | 1 | 05-28-2008 06:33 AM |
| hilf mir auf, um Daten | babu @ Shell | UNIX for Dummies Questions & Answers | 10 | 10-24-2006 03:25 AM |
| sed, fügen Sie Daten aus einer Datei in einen anderen? | ctcuser | Shell Programmierung und Scripting | 4 | 05-03-2005 02:43 PM |
![]() |
|
|
LinkBack | Thread Tools | Suche diesen Thread | Rate Thread | Anzeige-Modi |
|
|
|
||||
|
Wie Daten vor, um ein Feld in eine Reihe von Daten, je auf Werte in der Zeile
Hi
Ich muss etwas tun, was wie "finden, und legen Sie vor, dass" in eine Datei, die viele Datensätze enthält. Dies wird deutlich, mit dem folgenden Beispiel. Der ursprüngliche Datensatz sollte eine gewisse etwas davon 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
Ich brauche, um 441 genau in dieser Position, wenn 442 ist als nächste Daten. seine Sache, wie bei einigen Erklärungen ... Ich werde mit unterschiedlichen Werten von 442 und die entsprechenden Daten zurück Wie gehen Sie dazu eine ... help me out ... Am mit viel Fehlerdateien davon zu behandeln, daher kann ich tun, wie in einer DB-Upload-Datei und fügen Sie Daten auf der Grundlage der Werte in der Zeile auf dem Standpunkt, den ich bereits gesagt (442) Help me out! |
|
|||||
|
Hallo gibt,
Da hieß es, man muss sich eine Muster-Struktur für Ihre Datei mit den genauen Zahlen Bereich, wo sich die Angaben soll geändert werden, oder zumindest eine Gruppe von bestimmten Werten, nach denen das Skript hat, um die Datei und fügen Sie was fehlt. Nur für die Ihnen einen ersten Eindruck, wenn die spezifischen Werte sind 441 und 442, dann die folgenden KornShell-Skript wird die Arbeit 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
Doch dies funktioniert nur wenn das Trennzeichen in der Datei sind die Standardwerte für IFS ist, \ n \ t und ''. Grüße, ![]() |
|
|||||
|
Zitat:
$. / Myscript.ksh myfile |
|
||||
|
Hi
Ihre Arbeitsweise, aber es ist die Neuausrichtung in den Daten Abstand. Die bestehenden Daten-Positionen sollten nicht gestört werden und die Anzahl der Zeichen 248 sollte beibehalten werden, das Ergebnis zu Es werden Leerzeichen am Ende jeder Zeile und in der Daten als gut. der freie Raum indiactes gibt es keine Daten für diesen Bereich. Tatsächlich gibt es einige Namen, mit denen die Berichte erzeugt werden, wenn dieser Bereich nicht zur Verfügung steht in dem Bericht wird es Leerzeichen zu erwähnen, dass. Ich brauche, um die Länge 248 Zeichen. Da diese Datei wird für die Formatierung zu anderen Format in einem anderen Server. So Daten zu erhalten. Es muss mit 11 Leerzeichen nach dem Timestamp: 20090309102806279 nach, die ich benötige, um die 441, wenn 442 ist. |
|
|||||
|
Es ist sehr schwierig, in Shell-Skript zu manipulieren Zeile mit Leerzeichen ... Versuchen Sie diesen Code und starten Sie es, wie:. / Myscript infile outfile
Nehmen Sie Wert auf 441/442 Positionen 116 und 130. Wenn ein paar Zeilen mit einem #-Zeichen, ändern Sie es in das Skript mit einem anderen nicht-Zeichen verwendet werden. 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
|
![]() |
| Lesezeichen |
| Thread Tools | Suche diesen Thread |
| Anzeige-Modi | Rate this thread |
|
|