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=\ndefineIFSpara a letran. Isto não é o que você quer. Se você realmente quiser queIFSseja uma nova linha, useIFS=$'\n'. -
$last_col =~ ^[[:digit:]]+$Este teste assegura que
last_colseja 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>2As duas primeiras linhas do arquivo são cabeçalhos. Isso pula sobre eles.
-
$NF != 0Isto seleciona linhas cujo último campo é diferente de zero.
-
sem comando explícito associado às duas condições acima,
awkimprimirá 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