Foros del Web » Administración de Sistemas » Unix / Linux »

Duda bash y awk -curiosa!-

Estas en el tema de Duda bash y awk -curiosa!- en el foro de Unix / Linux en Foros del Web. Hola y gracias por leerlo: resulta curioso, que si ingreso directamente en la bash Código: ls -l $dir | grep -v total | awk '{print ...
  #1 (permalink)  
Antiguo 01/06/2011, 11:21
 
Fecha de Ingreso: junio-2011
Mensajes: 1
Antigüedad: 13 años, 6 meses
Puntos: 0
Duda bash y awk -curiosa!-

Hola y gracias por leerlo:

resulta curioso, que si ingreso directamente en la bash

Código:
ls -l $dir | grep -v total | awk '{print "Permisos",$1,"nombre",$8}'
la salida es

Permisos drwxr-xr-x nombre Documentos
Permisos drwxr-xr-x nombre Escritorio
Permisos drwxr-xr-x nombre fuente
Permisos drwxr-xr-x nombre Imágenes
Permisos -rw-r--r-- nombre logbackup.txt
Permisos drwxr-xr-x nombre Música
Permisos drwxr-xr-x nombre Público
Permisos -rw-r--r-- nombre [email protected].
Permisos -rw-r--r-- nombre [email protected]
Permisos -rw-r--r-- nombre [email protected]
Permisos -rw-r--r-- nombre trabajo
Permisos drwxr-xr-x nombre Vídeos

Peeeeeero!!!

Si incluyo eso mismo en un script del tipo (for por ej)

Código:
#!/bin/bash
echo "Su directorio?"
read dir
for i in `ls -l $dir | grep -v total | gawk '{print "Permisos"$1"nombre"$8}'`;do
echo "$i"
done
su salida sera

Permisos
drwxr-xr-x
nombre
Documentos
Permisos
drwxr-xr-x
nombre
Escritorio
Permisos
drwxr-xr-x
nombre
fuente
Permisos
drwxr-xr-x
nombre
Imágenes
Permisos
-rw-r--r--
nombre
logbackup.txt
Permisos
drwxr-xr-x
nombre
Música
Permisos
drwxr-xr-x
nombre
Público
Permisos
-rw-r--r--
nombre
[email protected].
Permisos
-rw-r--r--
nombre
[email protected]
Permisos
-rw-r--r--
nombre
[email protected]
Permisos
-rw-r--r--
nombre
trabajo
Permisos
drwxr-xr-x
nombre
Vídeos

Por qué esas nuevas lineas? Dónde esta el fallo, en el uso de awk o del for?

Mi conclusión es que cada valor de $i lo toma de una cadena, no de una linea, y entonces te imprime $i tantas veces como vueltas pega el for...es decir 1 vuelta: valor=permisos, la imprimo. Vuelta 2 valor=-xwr-x-x, imprimo, y asi hasta que se termina el ls y sale del for.
Estoy equivocado?
O es el awk , que me imprime una nueva linea?

Cómo puedo hacer que en el script salga como al principio?

ayuda x favor !!

y gracias!!!
  #2 (permalink)  
Antiguo 01/06/2011, 13:57
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 7 meses
Puntos: 344
Respuesta: Duda bash y awk -curiosa!-

Es como dices tú, el bucle for lo que va tomando es cada palabra de la cadena que devuelve la ejecución de ls -l $dir | grep -v total | gawk '{print "Permisos"$1"nombre"$8}' y la va imprimiendo.

Yo creo que para lo que quieres hacer no necesitas un bucle for, pero tendrías que explicar exactamente que quieres hacer.
  #3 (permalink)  
Antiguo 01/06/2011, 19:07
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda bash y awk -curiosa!-

Investigá sobre la variable IFS (Internal Field Separator).

Creo que tendrás más suerte con "while read":
Código:
ls -l ..... | while read linea; do
    echo "$linea"
done
A propósito: si vas a usar AWK, grep es innecesario:
Código:
ls -l $dir | awk '!/total/ { print "Permisos",$1,"nombre",$8}'
Un comentario más: quizás puedas ahorrarte el bucle si en vez de usar ls usás find, y jugás con la opción -printf


Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:43.