Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

Arjan van der Gaag

August 26, 2015
Tweet

More Decks by Arjan van der Gaag

Other Decks in Programming

Transcript

  1. 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 |
  2. COMMENT ON COLUMN geospatial_areas.postal_code IS '4 postcode posities'; COMMENT ON

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

    { [ACTIONS] } BEGIN { [ACTIONS] } END { [ACTIONS] }
  4. % 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** | |---------------|----------|------------------------------|
  5. % awk '{ print $1 }' docs.md Postcodes --------- Het

    Wij ### | |---------------|----------|------------------------------| ---------------| | |
  6. % 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`
  7. % awk -F '\|' '{ print $2 }' docs.md **Veld**

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

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

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

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

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

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

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

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

    { gsub("`", "") } /\|/ && !/-|\*/ && $4 != "" { print $2, $4 } postal_code 4 postcode posities region_id Regio code (dag of weekblad)
  16. #!/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)';
  17. % 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** | |---------------|----------|------------------------------|
  18. #!/usr/bin/awk -f BEGIN { FS = " *\| *" }

    { gsub("`", "") } /^### / { split($0, a, " ") } /\|/ && !/-|\*/ && $4 != "" { printf "COMMENT ON COLUMN %s.%s IS '%s';\n", a[2], $2, $4 }
  19. #!/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)';
  20. 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
  21. #!/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] ) )