com
(( count + 3 ))
você acabou de adicionar 3 a $ count e descarta o resultado. Experimente com
(( count = count + 3 ))
Eu tenho um arquivo que contém os nomes dos funcionários, os departamentos e as cidades em que o funcionário está, algo como:
John
IT
Chicago
Joshua
accounting
New York
Marcy
CEO
Los Angeles
...
Eu tenho que transformar esse arquivo para este formato:
John?IT?Chicago
Joshua?accounting?New York
Marcy?CEO?Los Angeles
usando o ponto de interrogação como um delimitador de campo
Eu fiz este script bash até agora:
fname="mix.txt"
exec<$fname
index=0
while read line ; do
ARRAYLINES[$index]="$line"
index=$(($index+1))
done < $fname
NUMBERLINES=$(grep -c "" $fname)
NUMBERLOOP=$(($NUMBERLINES/3))
count=0
for i in $(eval echo {1..$NUMBERLOOP})
do
one=$(($count+1))
two=$(($count+2))
LINE0=${ARRAYLINES[$count]}
LINE1=${ARRAYLINES[$one]}
LINE2=${ARRAYLINES[$two]}
((count + 3))
FINAL="$LINE0?$LINE1?$LINE2"
echo $FINAL >> final.txt
done
O arquivo final tem o número correto de linhas, mas todas as linhas são iguais aos dados do primeiro funcionário, como
John?IT?Chicago
John?IT?Chicago
John?IT?Chicago
John?IT?Chicago
John?IT?Chicago
John?IT?Chicago
John?IT?Chicago
alguma pista?
Normalmente eu não sou fã de postar respostas "na verdade você deveria fazer assim", mas alguém já abordou o erro no seu script e eu não consigo me impedir - você está fazendo isso muito difícil. Isso é muito mais fácil com uma ferramenta como sed
ou awk
. Por exemplo, em sed
:
$ sed 'N; N; s/\n/?/g' /path/to/your/file
Isso lê três linhas (uma por padrão, as outras duas por causa de N; N;
) e substitui as novas linhas por pontos de interrogação ( s/\n/?/g
). Ele irá gerar a versão convertida do arquivo; Se você quiser substituir o conteúdo no local, use o -i
flag
Outra maneira de fazer isso é com paste
:
<infile paste -d '?' - - -
Isto irá colar três linhas de uma vez usando o ponto de interrogação como delimitador. Se velocidade / processamento rápido é o que você precisa, então este é o caminho a percorrer. Além disso, como Stéphane Chazelas 'aponta , você pode até mesmo editar o arquivo no local.
Tags bash files text-processing