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).
-F
está 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])