awk abre un archivo de valores separados por canalización con datos en una sola columna, no en tres

awk abre un archivo de valores separados por canalización con datos en una sola columna, no en tres

tengo unPSVarchivo test1.psv con tres columnas de datos como se muestra a continuación, cuando se abre conawk, muestra datos en una sola columna.

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

en realidad este debería ser el "|" archivo delimitado con 3 columnas, pero cuando lo hago print $1, todas las columnas aparecen como la primera columna como se muestra a continuación

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

salidas:

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

pero el resultado debería ser:

xxxx
yyyy
fgsh

si lo hacemos print $2, el resultado debería ser:

0001
8768
6543

Respuesta1

Tienes que establecer un separador de campo |así -F(además, no es necesario 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 $aquí hay unsímbolo de línea de comando se utiliza para indicar el inicio de una nueva línea, no como parte del comando).

-Festá especificado porPOSIXy debería ser portátil.

Respuesta2

awkasumirá que un archivo está separado por tabulaciones o una cadena de uno o más espacios, por lo que para usar un archivo de valores separados por canalización, le decimos a awk que nuestros campos están separados por el carácter de barra vertical | .

Del primer enlace de la frase anterior:

El valor de (el separador de campo) se puede cambiar en el programa awk con el operador de asignación, '=' (consulte la sección Expresiones de asignación). A menudo, el momento adecuado para hacer esto es al comienzo de la ejecución, antes de que se haya procesado cualquier entrada, de modo que el primer registro se lea con el separador adecuado. Para hacer esto, use el patrón especial BEGIN (consulte la sección Los patrones especiales BEGIN y END).

Por ejemplo, aquí establecemos el valor de (el separador de campo, también conocido comoFS) a la cadena "|":

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

Respuesta3

para simplemente devolver solo una columna particular de un archivo delimitado, esto

cut -d'|' -f1 test1.csv

para devolver el campo 1... cambie arriba a -f2 para devolver la segunda columna... el parámetro -d define el carácter delimitador en este caso '|'

es común crear una canalización de muchos comandos vinculados entre sí mediante la canalización | entonces arriba también se puede escribir

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

Respuesta4

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])

información relacionada