Field separator no AWK

0

Eu tenho um arquivo txt no qual tenho registros como

cat,bdb awq,sdcsidsjo hhhd 
xs,dun,hat ase, xsdfc
xd,yu,nor acc,cuiov dfvgf

Eu quero a saída apenas abaixo das palavras (segunda coluna depois do espaço).

awq
ase
acc

Eu tentei os comandos como awk '{print $2}' , awk 'BEGIN {print $2} { FS="," }' , awk '{print $2 FS=","}' , awk 'BEGIN{ORS=",";} {print $2}'
mas nada funcionou, alguém pode saber como consegui-lo.

Eu editei a questão na minha primeira coluna eu tenho vírgulas, se eu usar awk 'BEGIN {FS=","} {print $ 2}'

Estou obtendo o resultado bdb dun yu

mas eu quero que o resultado seja mostrado como awq ase acc

Alguém pode saber como obter o resultado?

    
por absar 05.10.2018 / 18:24

3 respostas

2

(atualizado para a pergunta atualizada)

Parece que você deseja extrair a primeira palavra depois de um espaço, até a próxima vírgula.

$ awk -F ' ' '{ split($2,a,","); print a[1] }' <file
awq
ase
acc

Isso trata os dados como delimitados por espaço, depois pega o segundo campo delimitado por espaço e o divide explicitamente em vírgulas e imprime a primeira string resultante desse resultado.

Como alternativa, com sed :

$ sed 's/^[^ ]* //; s/,.*$//' <file
awq
ase
acc

Isso usa duas substituições para primeiro remover o bit até o primeiro espaço e, em seguida, o bit da vírgula. A seqüência restante é impressa.

    
por 05.10.2018 / 18:33
0
Command: for i in 'echo "cbdb awq,sdcsidsjo hhhd xsdunh ase, xsdfc xdyun acc,cuiov dfvgf" | awk -F "," '{print $1,$2,$3}'';   do echo $i | awk '/^a/{print $0}'; done|tr "\n" " "

entrada

cbdb awq,sdcsidsjo hhhd xsdunh ase, xsdfc xdyun acc,cuiov dfvgf

saída

comando

for i in 'echo "cbdb awq,sdcsidsjo hhhd xsdunh ase, xsdfc xdyun acc,cuiov dfvgf" | awk -F "," '{print $1,$2,$3}'';   do echo $i | awk '/^a/{print $0}'; done|tr "\n" " "

saída

awq ase acc
    
por 05.10.2018 / 18:44
0

com o awk:

<infile awk -F ' ' '{ sub(/,.*$/,"",$2); print $2 }'

Com o GNU awk:

<infile awk -F ' ' '{print gensub(/,.*$/,"",1,$2)}'

com sed:

<infile sed 's/^[^ ]* //;s/,.*//'
    
por 08.10.2018 / 08:40