Advertisement
homer512

stateful awk

Mar 23rd, 2015
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 0.87 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # Demonstrates how awk can operate stateful across multiple lines
  4.  
  5.  
  6. tstfile="$(mktemp)"
  7.  
  8. exec 3>"$tstfile"
  9. echo Garbage >&3
  10. echo HEADER1 >&3
  11. echo Garbage >&3
  12. echo Garbage >&3
  13. echo Garbage >&3
  14. echo TIMESTAMP1 >&3
  15. echo Garbage >&3
  16. echo Garbage >&3
  17. echo Garbage >&3
  18. echo MATCH1 >&3
  19. echo Garbage >&3
  20. echo HEADER1 >&3
  21. echo Garbage >&3
  22. echo Garbage >&3
  23. echo Garbage >&3
  24. echo TIMESTAMP1 >&3
  25. echo Garbage >&3
  26. echo Garbage >&3
  27. echo Garbage >&3
  28. echo MATCH2 >&3
  29.  
  30. exec 3>&-
  31.  
  32. awk '
  33. function clear_state() { header=""; timestamp="" }
  34. BEGIN{ clear_state() }
  35. /^HEADER/{ clear_state(); header=$0 }
  36. header && /^TIMESTAMP/{ timestamp=$0 }
  37. header && timestamp && /^MATCH1/ {
  38.    printf("%s @ %s: %s\n", header, timestamp, $0);
  39.    clear_state()
  40. }
  41. header && timestamp && /^MATCH2/ {
  42.    print($0);
  43.    clear_state();
  44. }
  45. ' <"$tstfile"
  46.  
  47. unlink "$tstfile"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement