147 words
1 minute
Using awk to add a prefix
Using awk to add a prefix
I wanted to dynamically run the following command against all files in a directory:
pypi-to-sqlite content.db -f /tmp/pypi-datasette-packages/packages/airtable-export.json \-f /tmp/pypi-datasette-packages/packages/csv-diff.json \--prefix pypi_I can’t use /tmp/pypi-datasette-packages/packages/*.json here because I need each file to be processed using the -f option.
I found a solution using awk. The awk program '{print "-f "$0}' adds a prefix to the input, for example:
% echo "blah" | awk '{print "-f "$0}'-f blahI wanted that trailing backslash too, so I used this:
{print "-f "$0 " \\"}Piping to awk works, so I combined that with ls ../*.json like so:
% ls /tmp/pypi-datasette-packages/packages/*.json | awk '{print "-f "$0 " \\"}'-f /tmp/pypi-datasette-packages/packages/airtable-export.json \-f /tmp/pypi-datasette-packages/packages/csv-diff.json \-f /tmp/pypi-datasette-packages/packages/csvs-to-sqlite.json \Then I used eval to execute the command. The full recipe looks like this:
args=$(ls /tmp/pypi-datasette-packages/packages/*.json | awk '{print "-f "$0 " \\"}')eval "pypi-to-sqlite content.db $args--prefix pypi_"Full details in datasette.io issue 98.
Using awk to add a prefix
https://mranv.pages.dev/posts/using-awk-to-add-a-prefix/