2010-03-04 20 views
7

que tengo en un script bash:cadenas Concatenate en bash

for i in `seq 1 10` 
do 
    read AA BB CC <<< $(cat file1 | grep DATA) 
    echo ${i} 
    echo ${CC} 
    SORT=${CC}${i} 
    echo ${SORT} 
done 

por lo que "i" es un número entero, y CC es una cadena como "HOY"

me gustaría conseguir a continuación en SORT "hoy1", etc

Pero consigo "1ODAY", "2ODAY" y así

dónde está el error?

Gracias

+0

El comando 'for i in \' seq 1 10 \ '; hacer eco HOLA $ i; done' da HELLO1 HELLO2 ... El problema puede estar en el archivo1 – mouviciel

+1

muestra un ejemplo de su contenido de su archivo de entrada1, y su resultado deseado. – ghostdog74

Respuesta

7

Usted debe tratar

SORT="${CC}${i}" 

Asegúrese de que el archivo no contiene "\ r" que terminaría sólo en el final de $ CC. Esto bien podría explicar por qué obtienes "1ODAY".

intente incluir | tr '\ r' '' tras el comando cat

+0

mismo problema ya que – flow

+1

sus archivos pueden tener \ r \ n lien finalizado, y read solo entiende el \ n. Entonces, termina en la variable CC ... debe eliminarla. – tonio

+0

tr -d '\ r' hizo el trabajo gracias – flow

1

tratar

for i in {1..10} 
    do 
     while read -r line 
     do 
     case "$line" in 
     *DATA*) 
      set -- $line 
      CC=$3 
      SORT=${CC}${i} 
      echo ${SORT} 
     esac 
     done <"file1" 
    done 

De lo contrario, muestran un ejemplo de archivo1 y su salida deseada

+0

gracias. tu idea es buena – flow

1

ghostdog es correcto : con la opción -r, leer evita sucumbir a posibles horrores, como CRLF. El uso de matrices hace que la opción -r sea más agradable:

 
for i in `seq 1 10` 
do 
    read -ra line <<< $(cat file1 | grep DATA) 
    CC="${line[3]}" 
    echo ${i} 
    echo ${CC} 
    SORT=${CC}${i} 
    echo ${SORT} 
done 
Cuestiones relacionadas