2012-03-06 41 views
14

Tengo un archivo de la siguiente manera:corte de comandos de línea nueva

one 
two 
three 
four 

me gustaría utilizar un bucle en una escritura del golpe con el fin de escanear el archivo línea para la línea. Anteriormente utilicé cut pero no pude darle al comando cut el delimitador de línea nueva, ¿cómo puedo hacerlo?

De este modo no funciona:

cut -d'\n' -f1 

Cualquier sugerencia?

Respuesta

11

Uso cat para concatenar o mostrar. No hay necesidad de ello aquí:

while read line ; do 
    echo "$line" 
done < file 
+0

Estoy de acuerdo con esto, pero esto es notoriamente más lento que el enfoque 'cortado'. –

1
cat FILE|while read line; do # 'line' is the variable name 
    echo "$line" # do something here 
done 

o (ver comentario):

while read line; do # 'line' is the variable name 
    echo "$line" # do something here 
done < FILE 
+2

[UUOC] (http://en.wikipedia.org/wiki/Cat_%28Unix%29#Useless_use_of_cat) - Use 'tiempo ... hecho Kevin

+0

No es inútil, quizás sea un desperdicio (después de leer este párrafo), pero también es más fácil de leer IMO. – 0xC0000022L

-1

Mi opinión es que "cortar" usa '\ n' como su delimitador predeterminado. Si desea utilizar corte, que tienen dos maneras:

cut -d^M -f1 file_cut 

I logren M^Por clic en Enter Después Ctrl + V. Otra forma es

cut -c 1- file_cut 

ayuda eso?

+0

Lamentablemente, ninguno de los anteriores funcionó para mí (bash, versión 4.2.45). –

39

me encontré en el mismo problema, esto funciona para mí:

cat file.cut | cut -d$'\n' -f1 

O:

cut -d$'\n' -f1 file.cut 
+0

Esto funcionó bien para mí :) gracias – Sina

3

simplemente usar:

echo -n `cut ...` 

Esto suprime la \ n en el fin

1

Por lo tanto, som Ya se han proporcionado respuestas realmente buenas (posiblemente mejores). Pero al ver el fraseo de la pregunta original, al querer utilizar un bucle for de BASH, me sorprendió que nadie mencionara una solución con el cambio de Field Separator IFS. Es una solución pura fiesta, al igual que la línea de lectura aceptado

old_IFS=$IFS 
IFS='\n' 
for field in $(<filename) 
do your_thing; 
done 
IFS=$old_IFS 
Cuestiones relacionadas