Usando bash
Os seguintes trabalhos:
while IFS= read -r line
do
last_col='echo "$line" | awk '{print $(NF)}''
if [[ $last_col =~ ^[[:digit:]]+$ && "$last_col" -ne 0 ]]; then
echo $line
fi
done </proc/user_beancounters
Notas:
-
O comando
IFS=\n
defineIFS
para a letran
. Isto não é o que você quer. Se você realmente quiser queIFS
seja uma nova linha, useIFS=$'\n'
. -
$last_col =~ ^[[:digit:]]+$
Este teste assegura que
last_col
seja um inteiro. Isso tem o efeito de pular as linhas de cabeçalho.
Usando awk
Repetir as linhas de um arquivo é algo que awk
faz naturalmente. O código acima pode ser substituído por:
awk 'NR > 2 && $NF != 0' /proc/user_beancounters
Notas:
-
NR>2
As duas primeiras linhas do arquivo são cabeçalhos. Isso pula sobre eles.
-
$NF != 0
Isto seleciona linhas cujo último campo é diferente de zero.
-
sem comando explícito associado às duas condições acima,
awk
imprimirá toda a linha.
Como alternativa, se você quiser imprimir apenas a primeira e a última coluna, use:
awk 'NR>2 && $NF != 0 {print $1,$NF}' /proc/user_beancounters