DEV Community

Heddi Nabbisen
Heddi Nabbisen

Posted on

Awk Commands to replace filenames

(Gnu's) Awk is a scripting language to manipulate text data.
This post shows how I replaced filenames using awk Commands.

I had translation dictionary files in Swedish aka "Sv"enska.

$ ls -1 translations/*.sv.*
translations/about.sv.xliff
...
translations/validators.sv.xliff
Enter fullscreen mode Exit fullscreen mode

Well, my goal was to get cp commands to duplicate them such as:

$ cp translations/about.sv.xliff translations/about.ja.xliff
Enter fullscreen mode Exit fullscreen mode

I was not used to awk.
Therefore, I first tried to print the same list with awk's print.

$ ls -1 translations/*.sv.* | \
    awk '{ print $1; }'
translations/about.sv.xliff
...
translations/validators.sv.xliff
Enter fullscreen mode Exit fullscreen mode

Got 🙂
Next, I found awk has gsub as a standard library function. "gsub" exists in Ruby and I was familiar with it.

$ ls -1 translations/*.sv.* | \
    awk '{ gsub(".sv.", ".ja.", $1); print $1; }'
translations/about.ja.xliff
...
translations/validators.ja.xliff
Enter fullscreen mode Exit fullscreen mode

I succeeded in replacing languages in filenames.
Then I lined up the original and the replaced.

$ ls -1 translations/*.sv.* | \
    awk '{ print $1; gsub(".sv.", ".ja.", $1); print $1; }'
translations/about.sv.xliff
translations/about.ja.xliff
...
...
translations/validators.sv.xliff
translations/validators.ja.xliff
Enter fullscreen mode Exit fullscreen mode

Got, but I didn't want new lines between the original and the replaced.
Thus, I converted print to printf.

$ ls -1 translations/*.sv.* | \
    awk '{ printf $1; gsub(".sv.", ".ja.", $1); print $1 }'
translations/about.sv.xlifftranslations/about.ja.xliff
...
translations/validators.sv.xlifftranslations/validators.ja.xliff
Enter fullscreen mode Exit fullscreen mode

It seemed necessary to insert space. Anyway, it was coming there soon.

ls -1 translations/*.sv.* | \
    awk '{ printf "cp "$1" "; gsub(".sv.", ".ja.", $1); print $1";" }'
cp translations/about.sv.xliff translations/about.ja.xliff;
...
cp translations/validators.sv.xliff translations/validators.ja.xliff;
Enter fullscreen mode Exit fullscreen mode

I got the commands above. I ran them. They were successful.
After all, I got thanks to awk commands:

$ ls -1 translations/*.ja.*
translations/about.ja.xliff
translations/daterangepicker.ja.xliff
translations/exceptions.ja.xliff
translations/flashmessages.ja.xliff
translations/invoice-calculator.ja.xliff
translations/invoice-numbergenerator.ja.xliff
translations/invoice-renderer.ja.xliff
translations/messages.ja.xliff
translations/pagerfanta.ja.xliff
translations/plugins.ja.xliff
translations/system-configuration.ja.xliff
translations/validators.ja.xliff
Enter fullscreen mode Exit fullscreen mode

So sweet 🙂

Discussion (0)