fork download
  1. #!/usr/bin/env bash
  2. set -x
  3.  
  4. name=
  5. while IFS= read -r line; do
  6. [[ $line = *"#"* ]] && line=${line%%"#"*} # strip comments
  7. [[ $line ]] || continue # skip empty lines
  8. [[ $line =~ ^[[:space:]]+$ ]] && continue # skip lines with only whitespace
  9. new_name=${line%%_*}; new_name=${new_name%%=*}
  10. if [[ $new_name != "$name" ]]; then
  11. if [[ $name ]]; then
  12. echo "${name}:${count}:${groups}"
  13. fi
  14. name=$new_name; count=; groups=
  15. fi
  16. case $line in
  17. *_count=*) count=${line#*_count=} ;;
  18. *=*) groups=${line#*=} ;;
  19. esac
  20. done
  21. echo "${name}:${count}:${groups}"
Success #stdin #stdout #stderr 0.01s 5540KB
stdin
group1=A,B,C
group1_count=10

# zero or more number of empty lines

group2=A,E
group2_count=1
stdout
group1:10:A,B,C
group2:1:A,E
stderr
+ name=
+ IFS=
+ read -r line
+ [[ group1=A,B,C = *\#* ]]
+ [[ -n group1=A,B,C ]]
+ [[ group1=A,B,C =~ ^[[:space:]]+$ ]]
+ new_name=group1=A,B,C
+ new_name=group1
+ [[ group1 != '' ]]
+ [[ -n '' ]]
+ name=group1
+ count=
+ groups=
+ case $line in
+ groups=A,B,C
+ IFS=
+ read -r line
+ [[ group1_count=10 = *\#* ]]
+ [[ -n group1_count=10 ]]
+ [[ group1_count=10 =~ ^[[:space:]]+$ ]]
+ new_name=group1
+ new_name=group1
+ [[ group1 != \g\r\o\u\p\1 ]]
+ case $line in
+ count=10
+ IFS=
+ read -r line
+ [[ '' = *\#* ]]
+ [[ -n '' ]]
+ continue
+ IFS=
+ read -r line
+ [[ # zero or more number of empty lines = *\#* ]]
+ line=
+ [[ -n '' ]]
+ continue
+ IFS=
+ read -r line
+ [[ '' = *\#* ]]
+ [[ -n '' ]]
+ continue
+ IFS=
+ read -r line
+ [[ group2=A,E = *\#* ]]
+ [[ -n group2=A,E ]]
+ [[ group2=A,E =~ ^[[:space:]]+$ ]]
+ new_name=group2=A,E
+ new_name=group2
+ [[ group2 != \g\r\o\u\p\1 ]]
+ [[ -n group1 ]]
+ echo group1:10:A,B,C
+ name=group2
+ count=
+ groups=
+ case $line in
+ groups=A,E
+ IFS=
+ read -r line
+ [[ group2_count=1 = *\#* ]]
+ [[ -n group2_count=1 ]]
+ [[ group2_count=1 =~ ^[[:space:]]+$ ]]
+ new_name=group2
+ new_name=group2
+ [[ group2 != \g\r\o\u\p\2 ]]
+ case $line in
+ count=1
+ IFS=
+ read -r line
+ echo group2:1:A,E