# AWK and SED Examples These examples explore the combined use of AWK and SED for text processing tasks. ## Example 1: AWK and SED for Text Transformation ### Input File (input.txt) ``` Carl Sanchez,25,Engineer Jane Smith,30,Designer Bob Johnson,22,Developer ``` ### Goal We want to transform the CSV data into a formatted table with headers. ### Solution ```bash awk -F',' '{printf "%-15s %-3s %-10s\n", $1, $2, $3}' input.txt | sed '1i\ Name Age Job\ --------------- --- ----------' ``` ### Output ``` Name Age Job --------------- --- ---------- Carl Sanchez 25 Engineer Jane Smith 30 Designer Bob Johnson 22 Developer ``` ## Example 2: AWK and SED for Selective Printing ### Input File (input.txt) ``` apple banana cherry date ``` ### Goal Print lines containing "c" or "r" using AWK and SED. ### Solution ```bash awk '/c|r/' input.txt | sed -n '/c\|r/p' ``` ### Output ``` cherry ``` ## Example 3: AWK and SED for Filtering and Sorting ### Input File (input.txt) ``` apple,5 banana,2 cherry,8 date,1 ``` ### Goal Filter lines with the second column greater than 2, sort by the second column, and add a header. ### Solution ```bash awk -F',' '$2 > 2' input.txt | sort -t',' -k2n | sed '1i\ Fruit,Quantity' ``` ### Output ``` Fruit,Quantity apple,5 cherry,8 ``` ## Example 4: AWK and SED for Text Extraction ### Input File (input.txt) ``` Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris. ``` ### Goal Extract sentences containing the word "sed" and replace "sed" with "AWK". ### Solution ```bash awk 'BEGIN{RS="\\."} /sed/' input.txt | sed 's/sed/AWK/g' ``` ### Output ``` AWK do eiusmod tempor incididunt ut labore et dolore magna aliqua ``` ## Example 5: AWK and SED for HTML Tag Extraction ### Input File (input.html) ```html

This is a paragraph.

Visit our website
``` ### Goal Extract and list all HTML tags present in the file. ### Solution ```bash sed -n 's/<[^>]*>//p' input.html | awk '{print tolower($0)}' ``` ### Output ``` div class="container" p /p a href="https://example.com" /a /div ``` ## Example 6: AWK and SED for JSON Formatting ### Input File (input.json) ```json { "name": "Carl Sanchez", "age": 30, "city": "Indianapolis" } ``` ### Goal Format the JSON to be human-readable using AWK and SED. ### Solution ```bash awk -v RS= '{$1=$1}1' input.json | sed 's/":"/": "/g; s/{/{\n/g; s/}/\n}/g' ``` ### Output ``` { "name": "Carl Sanchez", "age": 30, "city": "Indianapolis" } ``` ## Example 7: AWK and SED for Log Analysis ### Input File (logfile.txt) ``` 2023-01-15 10:23:15 INFO User login successful 2023-01-15 10:30:42 ERROR Invalid password attempt 2023-01-15 11:05:18 INFO User logout ``` ### Goal Extract and format log entries containing "ERROR". ### Solution ```bash awk '/ERROR/' logfile.txt | sed 's/\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\) \(ERROR .*\)/Timestamp: \1\n\2\n/' ``` ### Output ``` Timestamp: 2023-01-15 10:30:42 ERROR Invalid password attempt ``` ## Example 8: AWK and SED for CSV Transformation ### Input File (data.csv) ``` Name,Age,Occupation John,28,Engineer Jane,35,Designer Bob,22,Developer ``` ### Goal Transform the CSV data into a tab-separated format. ### Solution ```bash awk -F',' '{printf "%s\t%s\t%s\n", $1, $2, $3}' data.csv | sed '1i\ Name\tAge\tOccupation' ``` ### Output ``` Name Age Occupation John 28 Engineer Jane 35 Designer Bob 22 Developer ``` ## Example 9: AWK and SED for XML Tag Removal ### Input File (data.xml) ```xml Apple Banana Cherry ``` ### Goal Remove all XML tags and extract the content. ### Solution ```bash sed 's/<[^>]*>//g' data.xml | awk 'NF' ``` ### Output ``` Apple Banana Cherry ``` ## Example 10: AWK and SED for Markdown Table Conversion ### Input File (table.md) ```markdown | Name | Age | Occupation | |-------|-----|-------------| | John | 28 | Engineer | | Jane | 35 | Designer | | Bob | 22 | Developer | ``` ### Goal Convert the Markdown table into a CSV format. ### Solution ```bash sed -n '/|/p' table.md | awk -F'|' '{gsub(/^[ \t]+|[ \t]+$/, "", $2); gsub(/^[ \t]+|[ \t]+$/, "", $3); gsub(/^[ \t]+|[ \t]+$/, "", $4); printf "%s,%s,%s\n", $2, $3, $4}' ``` ### Output ``` Name,Age,Occupation John,28,Engineer Jane,35,Designer Bob,22,Developer ``` ## Example 11: AWK and SED for HTML List Extraction ### Input File (list.html) ```html ``` ### Goal Extract and list items from an HTML unordered list. ### Solution ```bash sed -n '/
  • /s/
  • \(.*\)<\/li>/\1/p' list.html | awk '{print "- " $0}' ``` ### Output ``` - Apple - Banana - Cherry ``` ## Example 12: AWK and SED for YAML to JSON Conversion ### Input File (data.yaml) ```yaml name: Carl Sanchez age: 30 city: Indianapolis ``` ### Goal Convert YAML data into JSON format. ### Solution ```bash sed -n '/^[^#]/s/: /: "/p' data.yaml | awk '{printf "%s", $0} END {print "\""}' | sed 's/"/\\"/g' | awk 'BEGIN {print "{"} {print " " $0} END {print "}"}' ``` ### Output ``` { name: "Carl Sanchez", age: "30", city: "Indianapolis" } ``` ## Example 13: AWK and SED for Extracting URLs ### Input File (text_with_urls.txt) ``` Visit our website: https://example.com For more information, check out: https://documentation.com ``` ### Goal Extract and list all URLs from the text. ### Solution ```bash sed -n 's/.*\(https\?:\/\/[^ ]*\).*/\1/p' text_with_urls.txt | awk '!a[$0]++' ``` ### Output ``` https://example.com https://documentation.com ``` ## Example 14: AWK and SED for Data Filtering and Sorting ### Input File (data.txt) ``` Name|Age|Occupation John|28|Engineer Jane|35|Designer Bob|22|Developer ``` ### Goal Filter entries with Age greater than 25 and sort by Age. ### Solution ```bash awk -F'|' '$2 > 25' data.txt | sort -t'|' -k2n | sed '1i\ Name|Age|Occupation' ``` ### Output ``` Name|Age|Occupation Jane|35|Designer John|28|Engineer ``` ## Example 15: AWK and SED for Line Reversal ### Input File (reverse_me.txt) ``` Line 1 Line 2 Line 3 ``` ### Goal Reverse the order of lines in the file. ### Solution ```bash awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }' reverse_me.txt | sed '1i\ Reversed Lines' ``` ### Output ``` Reversed Lines Line 3 Line 2 Line 1 ``` ## Example 16: AWK and SED for Word Frequency Analysis ### Input File (text_analysis.txt) ``` apple orange banana banana apple orange orange banana apple ``` ### Goal Count the frequency of each word and sort the results. ### Solution ```bash awk '{for(i=1; i<=NF; i++) words[$i]++} END {for(word in words) print word, words[word]}' text_analysis.txt | sort -k2n -r | sed '1i\ Word Frequency' ``` ### Output ``` Word Frequency banana 3 apple 3 orange 3 ``` ## Example 17: AWK and SED for JSON Pretty Printing ### Input File (json_data.json) ```json {"name":"John","age":30,"city":"Indianapolis"} ``` ### Goal Format the JSON data for better readability. ### Solution ```bash awk -v RS= '{$1=$1}1' json_data.json | sed 's/":"/": "/g; s/{/{\n/g; s/}/\n}/g' ``` ### Output ``` { "name": "John", "age": 30, "city": "Indianapolis" } ``` ## Example 18: AWK and SED for Extracting Email Addresses ### Input File (emails.txt) ``` Contact us at: info@example.com For support, email support@example.com ``` ### Goal Extract and list all email addresses from the text. ### Solution ```bash sed -n 's/.*\b\([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}\)\b.*/\1/p' emails.txt | awk '!a[$0]++' | sed '1i\ Email Addresses' ``` ### Output ``` Email Addresses info@example.com support@example.com ``` ## Example 19: Convert Markdown Headings to HTML ### Input (markdown_headings.md) ```markdown # Heading 1 ## Heading 2 ### Heading 3 ``` ### Goal Convert Markdown headings to HTML headings. ### Solution ```bash sed -n 's/^# \(.*\)$/\\1\<\/h1\>/p; s/^## \(.*\)$/\\1\<\/h2\>/p; s/^### \(.*\)$/\\1\<\/h3\>/p' markdown_headings.md ``` ### Output ```html

    Heading 1

    Heading 2

    Heading 3

    ``` ## Example 20: Convert Markdown Lists to HTML ### Input (markdown_lists.md) ```markdown - Item 1 - Item 2 - Subitem A - Subitem B ``` ### Goal Convert Markdown lists to HTML lists. ### Solution ```bash awk '/^-/ {gsub(/^-/, "
  • "); print ""}' markdown_lists.md ``` ### Output ```html ``` ## Example 21: Convert Bold and Italic Markdown to HTML ### Input (markdown_bold_italics.md) ```markdown **Bold Text** *Italic Text* ``` ### Goal Convert Markdown bold and italic text to HTML. ### Solution ```bash sed -e 's/\*\*\(.*\)\*\*/\\1\<\/strong\>/g' -e 's/\*\([^*]*\)\*/\\1\<\/em\>/g' markdown_bold_italics.md ``` ### Output ```html Bold Text Italic Text ``` ## Example 22: Reverse the Order of Lines ### Input (original_order.txt) ``` Line 1 Line 2 Line 3 ``` ### Goal Reverse the order of lines in the file. ### Solution ```bash awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }' original_order.txt ``` ### Output ``` Line 3 Line 2 Line 1 ``` ## Example 23: Sort Lines Alphabetically ### Input (unsorted_lines.txt) ``` Banana Apple Cherry ``` ### Goal Sort lines alphabetically. ### Solution ```bash sort unsorted_lines.txt ``` ### Output ``` Apple Banana Cherry ``` ## Example 24: Sort Lines by Line Length ### Input (lines_by_length.txt) ``` Short VeryLongLineWithManyCharacters MediumLength ``` ### Goal Sort lines by their length. ### Solution ```bash awk '{ print length, $0 | "sort -n"}' lines_by_length.txt | cut -d ' ' -f2- ``` ### Output ``` Short MediumLength VeryLongLineWithManyCharacters ```