Eu uso o AWK (um comando UNIX / Linux padrão que existe até mesmo uma implementação do Busybox) para um problema como esse, por exemplo
#!/bin/sh
awk -F'\t' 'BEGIN{srand()} {
X=$0
for(a=1;a<=NF;a++) {
if($a ~ /ABC/) {
if(rand() < .5) {
X = $a " " $0 # Concat strings
} else {
X = $0 " " $a
}
}
}
print X
}'
Como um aparte, eu não acho que a solução AWK seja mais complicada do que uma solução em Python:
#!/usr/bin/env python
import random
import re
import sys
for line in sys.stdin:
fields = re.split('\t',line[:-1])
out = line[:-1]
for field in fields:
if re.search('ABC',field):
if random.randint(0,1) == 1:
out = field + " " + line[:-1]
else:
out = line[:-1] + " " + field
print out