Extrair dados entre vírgula

3

Eu tenho um arquivo de saída que contém números diferentes separados por vírgulas. A questão é que eu não sei o número de vírgulas.

Eu, por sua vez, gostaria que esses dados fossem colocados em outro arquivo. Por exemplo:

Eu tenho INFO: 10,20,30,55,58,47,52,100

eu uso

awk '{split($0,a,","); for (i=1; i<=8; i++) print a[i]}' TMPFILE

para extrair os dados. Mas eu não sei quanto tempo o loop for deve ser executado.

Quando obtiver esses números como 10, preciso grep no data.txt depois 20 em data.txt e assim por diante até o último número.

    
por Newkid_Unix 06.03.2013 / 17:54

2 respostas

3

akw:

echo '10,20,30,55,58,47,52,100' | \
awk '{x=split($0,a,","); for (i=1; i <= x; ++i) print a[i]}'

awk usando o separador de campos:

echo '10,20,30,55,58,47,52,100' | \
awk -F ',' '{for(i=1; i <= NF; ++i) print $i}'

sed:

 echo '10,20,30,55,58,47,52,100' | sed 's/,/\n/g'

Então, o comando seria, por exemplo:

sed 's/,/\n/g' TMPFILE | xargs -I'{}' grep '{}' data.txt

Ou como usando xargs talvez:

xargs -a TMPFILE -d, -I'\x' grep '\x\{1\}' data.txt

Ou, se você não quiser usar xargs ; fazendo arquivo padrão com sed:

sed 's/\([^,]\+\),*/^$\n/g' TMPFILE | \
grep -o -f /proc/self/fd/0 data.txt

Ou

tr ',' '\n' < TMPFILE | \
grep -f /proc/self/fd/0 data.txt

Tudo depende do que e como você deseja grep.

    
por 06.03.2013 / 18:26
1

Se quiser repetir o mesmo arquivo, você também pode tentar um loop de shell:

IFS=,
for i in $(cat csvfile)
do
  grep "$i" datafile
done > outfile

Se você não colocar em um script ou sub-lista, precisará

oldIFS=$IFS

antes e

IFS=$oldIFS

depois ...

    
por 07.03.2013 / 15:14