Using Awk: An old-school text processing tool with surprising versatility

Using Awk: An old-school text processing tool with surprising versatility

241eb3a089132c5a0c65e765558a6735?s=128

Arjan van der Gaag

August 26, 2015
Tweet

Transcript

  1. Using Awk An old-school text processing tool with surprising versatility

  2. Postcodes --------- Het koppelen van postcodes aan verschillende soorten publications

    (dag en weekbladen) gaat via het volgende tabel. Wij houden zelf een tabel bij van postcodes met plaatsnamen, gemeentenamen en grenzen (voor kaartjes.) ### `geospatial_areas` | **Veld** | **Type** | **Beschrijving** | **Voorbeeld** | |---------------|----------|------------------------------|---------------| | `postal_code` | integer | 4 postcode posities | 3775 | | `region_id` | string | Regio code (dag of weekblad) | STAP |
  3. COMMENT ON COLUMN geospatial_areas.postal_code IS '4 postcode posities'; COMMENT ON

    COLUMN geospatial_areas.region_id IS 'Regio code (dag of weekblad)';
  4. Awk processes records with fields [CONDITION] { [ACTIONS] }

  5. Awk processes records with fields [CONDITION] { [ACTIONS] } [CONDITION]

    { [ACTIONS] }
  6. Awk processes records with fields [CONDITION] { [ACTIONS] } [CONDITION]

    { [ACTIONS] } BEGIN { [ACTIONS] } END { [ACTIONS] }
  7. % awk '{ print }' docs.md

  8. % awk '{ print }' docs.md Postcodes --------- Het koppelen

    van postcodes aan verschillende soorten publications (dag en weekbladen) gaat via het volgende tabel. Wij houden zelf een tabel bij van postcodes met plaatsnamen, gemeentenamen en grenzen (voor kaartjes.) ### `geospatial_areas` | **Veld** | **Type** | **Beschrijving** | **Voorbeeld** | |---------------|----------|------------------------------|
  9. % awk '{ print $1 }' docs.md

  10. % awk '{ print $1 }' docs.md Postcodes --------- Het

    Wij ### | |---------------|----------|------------------------------| ---------------| | |
  11. % awk -F '\|' '{ print $1 }' docs.md

  12. % awk -F '\|' '{ print $1 }' docs.md Postcodes

    --------- Het koppelen van postcodes aan verschillende soorten publications (dag en weekbladen) gaat via het volgende tabel. Wij houden zelf een tabel bij van postcodes met plaatsnamen, gemeentenamen en grenzen (voor kaartjes.) ### `geospatial_areas`
  13. % awk -F '\|' '{ print $2 }' docs.md

  14. % awk -F '\|' '{ print $2 }' docs.md **Veld**

    --------------- `postal_code` `region_id`
  15. % awk -F '\|' '/\|/ { print $2 }' docs.md

  16. % awk -F '\|' '/\|/ { print $2 }' docs.md

    **Veld** --------------- `postal_code` `region_id`
  17. % awk -F '\|' '/\|/ && !/-|\*/ { print $2

    }' docs.md
  18. % awk -F '\|' '/\|/ && !/-|\*/ { print $2

    }' docs.md `postal_code` `region_id`
  19. % awk -F ' *\| *' '/\|/ && !/-|\*/ {

    print $2 }' docs.md
  20. % awk -F ' *\| *' '/\|/ && !/-|\*/ {

    print $2 }' docs.md `postal_code` `region_id`
  21. % awk -F ' *\| *' '/\|/ && !/-|\*/ {

    print $2, $4 }' docs.md
  22. % awk -F ' *\| *' '/\|/ && !/-|\*/ {

    print $2, $4 }' docs.md `postal_code` 4 postcode posities `region_id` Regio code (dag of weekblad)
  23. #!/usr/bin/awk -f BEGIN { FS = " *\| *" }

    /\|/ && !/-|\*/ { print $2, $4 } `postal_code` 4 postcode posities `region_id` Regio code (dag of weekblad)
  24. #!/usr/bin/awk -f BEGIN { FS = " *\| *" }

    /\|/ && !/-|\*/ && $4 != "" { print $2, $4 } `postal_code` 4 postcode posities `region_id` Regio code (dag of weekblad)
  25. #!/usr/bin/awk -f BEGIN { FS = " *\| *" }

    { gsub("`", "") } /\|/ && !/-|\*/ && $4 != "" { print $2, $4 } postal_code 4 postcode posities region_id Regio code (dag of weekblad)
  26. #!/usr/bin/awk -f BEGIN { FS = " *\| *" }

    { gsub("`", "") } /\|/ && !/-|\*/ && $4 != "" { printf "COMMENT ON COLUMN t.%s IS '%s';\n", $2, $4 } COMMENT ON COLUMN t.postal_code IS '4 postcode posities'; COMMENT ON COLUMN t.region_id IS 'Regio code (dag of weekblad)';
  27. % awk '{ print }' docs.md Postcodes --------- Het koppelen

    van postcodes aan verschillende soorten publications (dag en weekbladen) gaat via het volgende tabel. Wij houden zelf een tabel bij van postcodes met plaatsnamen, gemeentenamen en grenzen (voor kaartjes.) ### `geospatial_areas` | **Veld** | **Type** | **Beschrijving** | **Voorbeeld** | |---------------|----------|------------------------------|
  28. #!/usr/bin/awk -f BEGIN { FS = " *\| *" }

    { gsub("`", "") } /^### / { split($0, a, " ") } /\|/ && !/-|\*/ && $4 != "" { printf "COMMENT ON COLUMN %s.%s IS '%s';\n", a[2], $2, $4 }
  29. #!/usr/bin/awk -f BEGIN { FS = " *\| *" }

    { gsub("`", "") } /^### / { split($0, a, " ") } /\|/ && !/-|\*/ && $4 != "" { printf "COMMENT ON COLUMN %s.%s IS '%s';\n", a[2], $2, $4 } COMMENT ON COLUMN geospatial_areas.postal_code IS '4 postcode posities'; COMMENT ON COLUMN geospatial_areas.region_id IS 'Regio code (dag of weekblad)';
  30. ruby -F' *\| *' -a -l -n -e '$table =

    $_.split(" ")[1] if / ^### /; next if !/\|/ || /-|\*/; print gsub('`', '', format "COMMENT ON COLUMN %s.%s IS %s;\n", $table, $F[1], $F[3])' docs.md
  31. #!/usr/bin/env ruby -F' *\| *' -a -l -n table =

    $_.split(" ")[1] if /^### / next if !/\|/ || /-|\*/ || $F[3] == "" print gsub('`', '', format( "COMMENT ON COLUMN %s.%s IS %s;\n", $table, $F[1], $F[3] ) )