Script de shell lê colunas separadamente do arquivo

2

Quando temos um arquivo que é como uma lista:

Mary 34
George 45
John 56
Josh 29

usando o comando awk $1 refere-se à primeira coluna e $2 à segunda coluna.Mas uma vez que escrevemos um script de shell, podemos usar o read line para ler a linha inteira ou podemos usar read number para ler a primeira palavra, estou certo? Então, a minha pergunta é no item acima se eu quisesse ler a segunda coluna como eu faria isso sem usar o comando awk de um script de shell.

    
por Phil_Charly 10.12.2013 / 15:55

3 respostas

6
while read firstcol secondcolandtherest ;
do
    something
done < the_file

ie: quando você coloca vários argumentos para "ler", ele coloca o primeiro no primeiro argumento, o segundo no segundo argumento, etc. No último argumento ele coloca o "resto da linha". / p>

alguns exemplos:

#if you want to read line by line: only 1 arg (therefore, it puts everyuthing in it, as the only arg is the last arg)
while read whole_line ; 
do
     something with "$whole_line"
done

#if you only want only column 1 in $first, and everything else in $second_and_rest_of_line:
while read  first second_and_rest_of_line
 do
     something with "$first" and "$second_and_rest_of_line"
done

#if you only want col 1 and 2, and don't care about any extra cols:
while read  first  second  nonimportant
do
     something with $first and "$second" #and we don't care about $nonimportant's content
done

Por favor, note que: você deve realmente adicionar a opção "-r" (para obter entrada bruta) para ler, e modificar o IFS de acordo com o que você precisa ... Mas os exemplos acima são para discutir os "argumentos", não a invocação de leitura adequada. Veja link para informações sobre isso e muitas outras sutilezas

    
por 10.12.2013 / 16:05
1
while read -a line; do echo -e "${line[1]}"; done < file
34
45
56
29

onde file contém sua lista.

    
por 10.12.2013 / 16:00
0

Em bash :

$ read -a arr <<< 'Mary 34'
$ echo "${arr[1]}"
34
    
por 10.12.2013 / 15:58