awk abre arquivo Pipe Separated Value com dados em uma única coluna, não em três

awk abre arquivo Pipe Separated Value com dados em uma única coluna, não em três

eu tenho umPSVarquivo test1.psv com três colunas de dados conforme abaixo, quando aberto porestranho, mostra dados em uma única coluna.

xxxx|0001|rose  
yyyy|8768|lotus  
fgsh|6543|lilly  

na verdade, este deveria ser o "|" arquivo delimitado com 3 colunas, mas quando I print $1, todas as colunas vêm como primeira coluna conforme abaixo

cat test1.psv |awk '{print $1}'

saídas:

xxxx|0001|rose
yyyy|8768|lotus
fgsh|6543|lilly

mas o resultado deve ser:

xxxx
yyyy
fgsh

se nós print $2, o resultado deve ser:

0001
8768
6543

Responder1

Você tem que definir um separador de campo |assim -F(também, você não precisa cat):

$ awk -F '|' '{print $1}' test1.csv
xxxx
yyyy
fgsh
$ awk -F '|' '{print $2}' test1.csv
0001
8768
6543
$ awk -F '|' '{print $3}' test1.csv
rose
lotus
lillyw

(Observe que $aqui está umprompt de linha de comando usado para indicar o início de uma nova linha, não faz parte do comando).

-Fé especificado porPOSIXe deve ser portátil.

Responder2

estranhoassumirá que um arquivo é separado por tabulações ou uma sequência de um ou mais espaços, portanto, para usar um arquivo Pipe Separated Value, dizemos ao awk que nossos campos estão separados pelo caractere de barra vertical | .

Do primeiro link da frase acima:

O valor de (o separador de campo) pode ser alterado no programa awk com o operador de atribuição, '=' (consulte a seção Expressões de Atribuição). Muitas vezes, o momento certo para fazer isso é no início da execução, antes que qualquer entrada tenha sido processada, para que o primeiro registro seja lido com o separador adequado. Para fazer isso, use o padrão especial BEGIN (veja a seção Os padrões especiais BEGIN e END).

Por exemplo, aqui definimos o valor de (o separador de campos, também conhecido comoFS) para a string "|":

cat test1.psv | awk 'BEGIN { FS = "|" } ; { print $1 }'

Responder3

simplesmente retornar apenas uma coluna específica de um arquivo delimitado, isso

cut -d'|' -f1 test1.csv

para retornar o campo 1 ... mude acima para -f2 para retornar a 2ª coluna ... o -d parm define o caractere delimitador neste caso '|'

é comum criar um pipeline de muitos comandos vinculados usando o pipe | então acima também pode ser escrito

cat test1.csv | cut -d'|' -f1

Responder4

awk -F "|" '{print $1}' p.txt ===============> To get first column

awk -F "|" '{print $2}' p.txt===================> To get second column




python

Below python code drives first and second column

#!/usr/bin/python

k=open('p.txt','r')
for i in k:
    print " ".join(i.split("|")[0:2])

informação relacionada