#!/usr/bin/env bb -i ;; https://github.com/babashka/babashka (defn fix-line [ctrs l] (if-let [[_ pre to-fix] (re-matches #"(.*?\s+)(d?grs);" l)] (do (swap! ctrs update-in [to-fix] #(if % (inc %) 1)) (format "%s%s_%d;" pre to-fix (get @ctrs to-fix))) l)) (let [ctrs (atom {})] (doseq [l *input*] (println (fix-line ctrs l)))) #### $ ./fwee.clj < terrible_sample.txt wire [130 : 0] dgrs_1 wire [130 : 0] dgrs_2 wire [130 : 0] dgrs_3 wire [130 : 0] grs_1 wire [130 : 0] grs_2 wire [130 : 0] grs_3