Unter Eingabe hat zwei Datensatztypen - seine Datei mit fester Breite mit Zeilen werden durch Zeilenumbruch getrennt. Im Folgenden finden Sie die Beispieldatensätze.mehrere awks und if-Anweisung
Satzart -41: Satzlänge-629
Satzart -42: Satzlänge-557
Satzart 41 und 42 ähnlich sind nur 3 Felder fehlen. also Felder, die fehlen, füge ich es als Leerzeichen hinzu. Danach werde ich die Hive-Tabelle mit TBLPROPERTIES ('serialization.null.format' -> spaces erstellen, so dass Leerzeichen in der Hive-Tabelle als NULL-Werte behandelt werden. (sugget, ob es einen besseren Weg gibt, dies zu handhaben)
in der Satzart 42, aus der 88. Spalte bis 113 hinzugefügt 26 Räume, von 114 bis 139 Säule hinzugefügt 26 Räume und 165. Spalte hinzugefügt 20 Räume. die Aufzeichnungslänge 629.
i den Datensatztyp zu machen versuche zu machen 42 ist die Länge des Datensatzes wie 557 Leerzeichen hinzufügen, so dass die Datensatzlänge als 629 entspricht Datensatz 41. So dass ich diese Datei in einzelne Hive-Tabelle laden kann. Unten ist der Befehl, den ich benutze Fehler. Können wir diesen Befehl zu verbessern der Aufnahmetyp von 42 Länge mit Aufnahmetyp 41. Dies ist eine Datei fester Länge
while read line
do
awk '
$2 == "1" {
echo $line >> test_pre.dat
echo "record type: 41";
}
$2 == "2" {
awk 'BEGIN{FS=OFS=""} {$88=" "$88} 1 \
{$114=" "$114} 1 \
{$116=" "$116} 1' test.dat >> test_pre.dat
echo "record type: 42";
}'
done
INPUT:
41310410768228735 354447062622381 0012167121812 110012167121812 110017402445978 06CCF005 61stas-att1.fsabcgroup0-010.ch1il01cvt.ch1il.uvp.els-an.abc.com 60000530400000002998F100F11000000000000000000000000150110192928150110192941150110192949000000080FFFFFFF00000000000000001B702A7C 0000000000000000 FFFFFFFF00 abc:[email protected];user=phone abc:[email protected];user=phone 000100
42310410755337373 354447061570839 0013133038111 110013133201177 06CCF005 61stas-att1.fsabcgroup0-005.ch1il01cvt.ch1il.uvp.els-an.abc.com 600004C150000000ADE5C100F11000000000000000100000000150110192815150110192822150110192950000000580000000000000000000000001B702BC9 0000000000000000 FFFFFFFF00 abc:+13133201177;[email protected]:+13133038111;npdi 000100
OUTPUT:
41310410768228735 354447062622381 0012167121812 110012167121812 110017402445978 06CCF005 61stas-att1.fsabcgroup0-010.ch1il01cvt.ch1il.uvp.els-an.abc.com 60000530400000002998F100F11000000000000000000000000150110192928150110192941150110192949000000080FFFFFFF00000000000000001B702A7C 0000000000000000 FFFFFFFF00 abc:[email protected];user=phone abc:[email protected];user=phone 000100
42310410755337373 354447061570839 0013133038111 110013133201177 0 6CCF005 61stas-att1.fsabcgroup0-005.ch1il01cvt.ch1il.uvp.els-an.abc.com 600004C150000000ADE5C100F11000000000000000100000000150110192815150110192822150110192950000000580000000000000000000000001B702BC9 0000000000000000 FFFFFFFF00 abc:+13133201177;[email protected]:+13133038111;npdi 000100
Für mehrere Zeilen Code verwendet, nicht verwenden Backticks. Setzen Sie einfach 4 Stellen vor jede Zeile (markieren Sie den Code und verwenden Sie die Schaltfläche <> oben. Sind Ihre Input/Output 3 Datensätze oder ist es multiple? Wenn ich Ihre Quelle für diese Frage betrachten, ist Input/Output 3 Zeilen und so verpackt, dass sie wie viele aussehen: – JNevill
Eingabe/Ausgabe hat Beispiel Datensatz einen Datensatz –
Wie werden 2 Datensätze (Typ 41 und 42) in der Eingabedatei gespeichert? Werden sie nur durch ein Leerzeichen getrennt? Ist es auch okay, wenn irgendwo im Datensatztyp 42 Platz hinzugefügt wird, so dass seine Länge der Länge des Datensatztyps 41 entspricht? – sameerkn