Ubuntu 16.04 GNU bash, version 4.4.0
I would like to format this text file filed with zip codes containing 1,264,524 lines.
#!/bin/bash
wget http://download.geonames.org/export/zip/allCountries.zip
unzip allCountries.zip
mv -f allCountries.txt .allCountries.txt
rm -f allCountries.zip
This is a section of the file unformatted.
AD AD100 Canillo 42.5833 1.6667 6
AD AD200 Encamp 42.5333 1.6333 6
AD AD300 Ordino 42.6 1.55 6
AD AD400 La Massana 42.5667 1.4833 6
AD AD500 Andorra la Vella 42.5 1.5 6
AD AD600 Sant Julià de Lòria 42.4667 1.5 6
AD AD700 Escaldes-Engordany 42.5 1.5667 6
AR 3636 POZO CERCADO (EL CHORRO (F), DPTO. RIVADAVIA (S)) Salta A -23.4933 -61.9267 3
AR 4123 LAS SALADAS Salta A -25.7833 -64.5 4
AR 4126 BARADERO Salta A -26.0833 -65.263 3
AR 4126 EL CUIBAL Salta A -26.0833 -65.263 3
AR 4126 LA ASUNCION Salta A -26.0833 -65.263 3
AR 4126 MIRAFLORES (TALA, DPTO. CANDELARIA) Salta A -26.0833 -65.263 3
AR 4141 TOLOMBON Salta A -26.2 -65.9167 4
AR 4141 QUISCA GRANDE Salta A -26.4367 -65.97 3
AR 4141 LA CIENEGUITA Salta A -26.4367 -65.97 3
AR 4141 MACHO RASTROJO Salta A -26.4367 -65.97 3
AR 4190 ROSARIO DE LA FRONTERA Salta A -25.8 -64.9667 4
AR 4190 OVANDO Salta A -25.8 -65.1 4
AR 4190 SAN ESTEBAN Salta A -25.8 -65.0333 3
AR 4190 LA BANDA (R. DE LA FRONTERA, DPTO. ROSARIO DE LA FRONTERA) Salta A -25.8 -65.0333 3
AR 4190 LA MATILDE Salta A -25.8 -65.0333 3
AR 4190 LAS PIEDRITAS Salta A -25.8 -65.0333 3
AR 4190 LOS POCITOS Salta A -25.8 -65.0333 3
AR 4190 OJO DE AGUA (ROSARIO DE LA FRONTERA, DPTO. R.DE LA FRONTERA) Salta A -25.8 -65.0333 3
AR 4190 POTRERILLO (R. DE LA FRONTERA, DPTO. ROSARIO DE LA FRONTERA) Salta A -25.8 -65.0333 3
This should be the final outcome:
AD AD100 Canillo 42.5833 1.6667 6
AD AD200 Encamp 42.5333 1.6333 6
AD AD300 Ordino 42.6 1.56 6
AD AD400 La Massana 42.5667 1.4833 6
AD AD500 Andorra la Vella 42.5 1.6 6
AD AD600 Sant Julià de Lòria 42.4667 1.5 6
AD AD700 Escaldes-Engordany 42.5 1.5667 6
AR 3636 POZO CERCADO (EL CHORRO (F), DPTO. RIVADAVIA (S)) Salta A -23.4933 -61.9267 3
AR 4123 LAS SALADAS Salta A -25.7833 -64.5 4
AR 4126 BARADERO Salta A -26.0833 -65.263 3
AR 4126 EL CUIBAL Salta A -26.0833 -65.263 3
AR 4126 LA ASUNCION Salta A -26.0833 -65.263 3
AR 4126 MIRAFLORES (TALA, DPTO. CANDELARIA) Salta A -26.0833 -65.263 3
AR 4141 TOLOMBON Salta A -26.2 -65.9167 4
AR 4190 OJO DE AGUA (ROSARIO DE LA FRONTERA, DPTO. R.DE LA FRONTERA) Salta A -25.8 -65.0333 3
AR 4190 POTRERILLO (R. DE LA FRONTERA, DPTO. ROSARIO DE LA FRONTERA) Salta A -25.8 -65.0333 3
So 30th tab or 88 spaces from the left the 3rd to the last column should begin. The first character on the last 3 columns is 12 spaces apart.
Every line has data so I tried cutting the last 3 columns into another file. Then I tried removing all whitespaces from the original file then formatting it into columns. The third column gives me troubles because if do
awk 'BEGIN{ OFS="\t"}{ print $1, $2, NR }' .allCountries.txt
AT 4873 Pehigen 34069
AT 4873 Hofberg 34070
AT 4873 Wiederhals 34071
AT 4873 Oberedt 34072
AT 4873 Oberegg 34073
AT 4873 Raitenberg 34074
AT 4873 Redltal 34075
AT 4873 Friedhalbing 34076
AT 4873 Unterhaselbach 34077
AT 4873 Redltal 34078
AT 4873 Erkaburgen 34079
AT 4873 Mayrhof 34080
AT 4873 Erdpries 34081
AT 4873 Grünbergsiedlung 34082
AT 4873 Brunnhölzl 34083
AT 4873 Seibrigen 34084
AT 4873 Kinast 34085
AT 4873 Stöckert 34086
AT 4873 Frankenburg 34087
AT 4873 Fischeredt 34088
AT 4873 Marigen 34089
AT 4873 Oberhaselbach 34090
AT 4873 Ottokönigen 34091
AT 4873 Fischigen 34092
AT 4873 Endriegl 34093
Any help would be grand.
awk
attempt, given the first fields of "AT" versus the sample input & desired output having "AD" and "AR" first fields. Some of the wording in the question might be confusing, but the sample input & output make it pretty clear to me.