Estou tentando imprimir de um arquivo usando o awk, mas minha saída está vazia. Aqui esta o meu codigo ate agora
accountNum=$1
while read -r LINE || [[ -n $LINE ]] ; do
awk -F',' '{ if($1==accountNum) { print $3.$2 } }' Accounts
done < Accounts
Eu também tentei isso:
accountNum=$1
while read -r LINE || [[ -n $LINE ]] ; do
echo $LINE | awk -F',' '{ if($1==accountNum) { print $3.$2 } }'
done < Accounts
O arquivo de entrada é:
1,Doe,John
2,Rooney,Wayne
3,Smith,Will
4,Crow,Russel
5,Cruise,Tom
A saída esperada quando executo o arquivo é
$./file.sh 3
Will Smith
Mas eu recebo o seguinte
$./file.sh 3
$
Isso não está sendo impresso. Conheço a solução com cut, mas quero usar o awk.
while
loop? :)Seu script já faz praticamente o trabalho sem nenhum
awk
:Não estou sugerindo que essa seja uma solução melhor ou mais eficiente do que usar
awk
sozinha, mas se você deseja owhile...read
loop, isso certamente superaawk
processos separados por cada linha. Apenas uma FYI, eu acho.fonte
Com a
-v a="$1"
definição daawk
variávela
no valor do primeiro argumento de linha de comando do script, especificamos que a entrada é separada por vírgula-F ','
. Se a primeira coluna for igual ao valor dea
, imprima as duas outras colunas na ordem inversa.Você não obtém nada em sua saída ao comparar a primeira coluna com a
awk
variávelaccountNum
, que não está definida.Se houvesse uma entrada cuja primeira coluna tivesse 0 (zero) nela, essa entrada teria sido impressa. Isso ocorre porque o valor das variáveis não definidas em é
awk
avaliado como zero.fonte