2010-03-04 16 views
7

ho in uno script bash:stringhe Concatena in 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 

così "i" è un intero, e CC è una stringa come "OGGI"

Vorrei entrare poi nel SORT , "in data odierna 1", ecc

Ma ottengo "1ODAY", "2ODAY" e così

Dove è l'errore?

Grazie

+0

Il comando 'for i in \' seq 1 10 \ '; fai eco CIAO $ i; done' restituisce HELLO1 HELLO2 ... Il problema potrebbe essere nel file1 – mouviciel

+1

mostra un esempio del contenuto del file di input1 e l'output desiderato. – ghostdog74

risposta

7

Si dovrebbe cercare

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

Assicurarsi che il file non contiene "\ r" che sarebbe finita solo alla fine di $ CC. Questo potrebbe spiegare perché si ottiene "1ODAY".

Prova compresi | tr '\ r' '' dopo il comando cat

+0

stesso problema già – flow

+1

i tuoi file potrebbero avere \ r \ n lien terminare e read capisce solo il \ n. Quindi \ r finisce nella variabile CC ... dovresti rimuoverlo. – tonio

+0

tr -d '\ r' ha fatto il lavoro grazie – flow

1

provare

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 

In caso contrario, mostrano un esempio di file1 e l'output desiderato

+0

grazie. la tua idea è buona – flow

1

ghostdog è giusto : con l'opzione -r, leggi evita di cedere a potenziali orrori, come i CRLF. Utilizzare gli array rende l'opzione -r più piacevole:

 
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 
Problemi correlati