Digamos que eu tenha um arquivo com o seguinte texto.
E o arquivo de origem que estou lendo é assim:
#0 abc 2016-08-06 01:12:57 AM 9.1% 779.9M of 1G 156.3M of 1G
#1 abc 2016-08-06 02:33:47 AM 12.1% 339.9M of 1G 126.3M of 1G
O seguinte é o script que estou usando
#!/bin/bash
opFile="opfile.txt"
sourceFile="TestOutput"
if [[ ! -e "$opFile" ]]
then
{
touch $opFile
count=0
grep "#" "$sourceFile" | while read -r line ; do
{
cpu=$(grep "#$count" "$sourceFile" | cut -f 4 | cut -d% -f1)
mem=$(grep "#$count" "$sourceFile" | cut -f 5 | cut -dM -f1)
disk=$(grep "#$count" "$sourceFile" | cut -f 6 | cut -dM -f1)
echo -e "$cpu\n$mem\n$disk" >> "$opFile"
((count++))
}
done
}
else
{
count=0
lineCounter=0
grep "#" "$sourceFile" | while read -r line ; do
{
cpu=$(grep "#$count" "$sourceFile" | cut -f 4 | cut -d% -f1)
mem=$(grep "#$count" "$sourceFile" | cut -f 5 | cut -dM -f1)
disk=$(grep "#$count" "$sourceFile" | cut -f 6 | cut -dM -f1)
((lineCounter++))
sed ""$lineCounter"s/$/,"$cpu"/" "$opFile" | tee "$opFile"
((lineCounter++))
sed ""$lineCounter"s/$/,"$mem"/" "$opFile" | tee "$opFile"
((lineCounter++))
sed ""$lineCounter"s/$/,"$disk"/" "$opFile" | tee "$opFile"
((count++))
}
done
}
fi
Agora, o script precisa ser executado várias vezes nesse $ sourceFile, pois os números nesse arquivo continuariam mudando. Então, a primeira vez que o script é executado, a saída é tão
9.1
779.9
156.3
12.1
339.9
126.3
E na segunda vez que é executado (assumindo que os valores são os mesmos no arquivo de origem), a saída deve ser semelhante.
9.1,9.1
779.9,779.9
156.3,156.3
12.1,12.1
339.9,339.9
126.3,126.3
Agora, a linha sed que usei está correta, tenho certeza, mas estou com problemas quando se trata de colocar isso no arquivo. Eu poderia ter usado o > > redirecionador de saída, mas está imprimindo tudo em uma nova linha. Tee está trabalhando um pouco inesperadamente, às vezes fazendo a coisa certa, outras vezes, meu opfile.txt está vazio. Alguma idéia de como colocar minha saída sed no arquivo corretamente? E não, de preferência, eu não quero nada exibido no stdout.
Obrigado!