I have a long list of common abbreviations for words in periodical titles. In the list, the full word is followed by its abbreviation. For example:
- Administration
- Admin.
- Applied
- Appl.
- Administrative
- Administ.
- Approximate
- Approx.
I want to turn the list into a Markdown table, like this:
| Word | Abbreviation |
|---|---|
| Administration | Admin. |
| Applied | Appl. |
The problem is that doing this by hand would take forever. So, I’m looking for some way to do this faster. If it helps, all of the abbreviated forms end with a period (.).
I’ve looked online but couldn’t find anything for this. That’s why I’m asking here. Any help?
>Solution :
Let’s assume that we have input file with list from your question. We can fill it using below command:
cat <<EOF > words+abbrs.txt
Administration
Admin.
Applied
Appl.
Administrative
Administ.
Approximate
Approx.
EOF
Creation of Markdown table is possible on Ubuntu using simple scripting as shown below:
-
dumb step-by-step method
# write table header echo "**Word** | **Abbreviation**" > table.md echo "- | -" >> table.md # extract odd lines as words to file words.txt awk 'NR%2==1' words+abbrs.txt > words.txt # extract even lines as abbreviations to file abbrs.txt awk 'NR%2==0' words+abbrs.txt > abbrs.txt # combine columns from words.txt and abbrs.txt with '|' separator paste -d '|' words.txt abbrs.txt >> table.md -
smart one-liner method (thanks to @steeldriver)
{ printf '%s\n' '**Word** | **Abbreviation**' '-|-'; paste -d '|' - - < words+abbrs.txt; } > table.md
You will get the Markdown file with the following contents:
$ cat table.md **Word** | **Abbreviation** - | - Administration|Admin. Applied|Appl. Administrative|Administ. Approximate|Approx.
So it will be rendered to HTML as
Word Abbreviation Administration Admin. Applied Appl. Administrative Administ. Approximate Approx.
More info about used tools:
man awklocally or online;man pastelocally or online- The GNU Awk User’s Guide
- BashGuide
- Advanced Bash-Scripting Guide