Primeira versão - FPAT é usado
gawk '
BEGIN {
FPAT="[0-9]+|[smhd]";
}
/s/ { factor = 1 }
/m/ { factor = 60 }
/h/ { factor = 3600 }
/d/ { factor = 86400 }
{
print $1 * factor, $0;
}' input.txt | sort -n | awk '{print $2}'
FPAT - A regular expression describing the contents of the fields
in a record. When set, gawk
parses the input into fields, where the fields match the regular expression, instead of
using the value of the FS variable as the field separator.
Segunda versão
Fiquei surpreso ao descobrir que, sem FPAT
, também funciona.
É causado o mecanismo de conversão numérica de awk
- Como o awk converte entre strings e números , a saber:
A string is converted to a number by interpreting any numeric prefix of the string as numerals: "2.5" converts to 2.5, "1e3" converts to 1,000, and "25fix" has a numeric value of 25. Strings that can’t be interpreted as valid numbers convert to zero.
gawk '
/s/ { factor = 1 }
/m/ { factor = 60 }
/h/ { factor = 3600 }
/d/ { factor = 86400 }
{
print $0 * factor, $0;
}' input.txt | sort -n | awk '{print $2}'
Entrada (alterada um pouco)
1s
122s
1h
2h
1m
2m
2s
1d
1m
Saída
Nota: 122 segundos a mais do que 2 minutos, por isso é ordenado após 2m.
1s
2s
1m
1m
2m
122s
1h
2h
1d