Ich habe eine Datei, die ich in eine Datenbanktabelle importieren möchte, aber ich möchte ein Stück in jeder Zeile haben. In dem Import, ich brauche für jede Zeile des Versatz (erste Byte) und die Länge (Anzahl von Bytes)Leistung: While-Schleife mit AWK
I habe die folgenden Dateien, um anzuzeigen:
*line_numbers.txt* -> Each row contains the number of
the last row of a record in *plans.txt*.
*plans.txt* -> All the information required for all the rows.
Ich habe den folgenden Code:
"plans.txt.0.504/"
"plans.txt.505.480/"
"plans.txt.984.480/"
"plans.txt.1464.1159/"
"plans.txt.2623.515/"
:
#Starting line number of the record
sLine=0
#Starting byte value of the record
offSet=0
while read line
do
endByte=`awk -v fline=${sLine} -v lline=${line} \
'{if (NR > fline && NR < lline) \
sum += length($0); } \
END {print sum}' plans.txt`
echo "\"plans.txt.${offSet}.${endByte}/\"" >> lobs.in
sLine=$((line+1))
offSet=$((endByte+offSet))
done < line_numbers.txt
Dieser Code wird in der lobs.in etwas ähnliche Datei schreiben
Das bedeutet beispielsweise, dass der erste Satz am Byte beginnt und für die nächsten Bytes fortfährt. Der nächste beginnt am Byte und fährt für die nächsten Bytes fort.
Ich muss noch mehr Tests ausführen, aber es scheint zu funktionieren. Mein Problem ist, es ist sehr sehr langsam für das Volumen, das ich verarbeiten muss.
Haben Sie irgendwelche Leistungstipps?
Ich sah in einer Weise, die Schleife in awk
einfügen, aber ich brauche 2 Eingabedateien und ich weiß nicht, wie es ohne die Weile zu verarbeiten.
Vielen Dank!
See [warum-ist-mit-a-Shell-Loop-to-Process-Text-als-bad-Praxis] (https://unix.stackexchange.com/questions/169716/why -ist-mit-a-shell-loop-to-process-text-betrachtet-bad-practice) aus einigen Gründen, um Text nicht mit einer Shell-Schleife zu manipulieren. Verwenden Sie einfach awk. Bearbeiten Sie Ihre Frage, um eine übersichtliche, testbare Beispieleingabe und erwartete Ausgabe zu erhalten, damit wir Ihnen helfen können. –