
Eu tenho uma lista de strings com o seguinte formato. Quais comandos eu poderia usar para extrair as respectivas seções. Eu estava pensando em usar o grep para extrair as palavras-chave, ou seja: ADD, nome de usuário (atra522) etc. Como devo abordar esse problema?
cop1010 ADD atra522,Allison Track,CT,canada
Sei usar cut ou awk para obter todos os campos procurando as vírgulas, mas não sei como fazer funcionar com o primeiro campo "cop1010 ADD atra522".
Responder1
Você disse bash
, então vamos fazer tudo com os recursos internos do shell:
$ inp="cop1010 ADD atra522,Allison Track,CT,canada"
$ IFS=, fields=($inp)
$ echo ${fields[0]}
cop1010 ADD atra522
$ echo ${fields[1]}
Allison Track
$ echo ${fields[2]}
CT
$ echo ${fields[3]}
canada
$ IFS=\ cmd=(${fields[0]})
$ echo ${cmd[0]}
cop1010
$ echo ${cmd[1]}
ADD
$ echo ${cmd[2]}
atra522
$
Você pode definir todos eles como variáveis (em vez de repeti-los) e nunca precisar gerar um subshell para executar awk
, cut
ou qualquer outra ferramenta.
Responder2
Você pode usar a função do awk split
para dividir ainda mais o primeiro campo em um array, por exemplo
echo 'cop1010 ADD atra522,Allison Track,CT,canada' |
awk -F, '{
split($1,a,"[ \t]+");
if (a[2] == "ADD") {
printf "Adding user: %s\n", a[3];
}
}'
Responder3
Solução Python:
import re,sys;
for l in sys.stdin:
if 'ADD' in l:
data = [re.split(",",l.rstrip("\n"))[0].split()[-1]]+re.split(",",l.rstrip("\n"))[1:]
print " ".join(data)
data = []
Testado com arquivo personalizado baseado no exemplo do OP:
$ cat input.txt
cop1010 ADD atra522,Allison Track,CT,canada
some other stuff
testuser ADD test522,Allison TEST,CT,germany
$ python user_data.py < input.txt
atra522 Allison Track CT canada
test522 Allison TEST CT germany
Para compatibilidade com python 3 e impressão bonita de dados, poderíamos fazer algo assim:
$ cat user_data.py
from __future__ import print_function
import re,sys;
for l in sys.stdin:
if 'ADD' in l:
data = [re.split(",",l.rstrip("\n"))[0].split()[-1]]+re.split(",",l.rstrip("\n"))[1:]
print("Username: " + data[0])
print("Real Name: " + data[1])
print("Some kind of two char string: "+ data[2])
print("Location: " + data[3])
print("- - -")
data = []
$ python user_data.py < input.txt
Username: atra522
Real Name: Allison Track
Some kind of two char string: CT
Location: canada
- - -
Username: test522
Real Name: Allison TEST
Some kind of two char string: CT
Location: germany
- - -