$ awk -F'[ (]' '{a[$1]=a[$1] $3 "\n"} END{for (name in a)print name "\n" a[name]}' loginFile
bobby
2014-05-12
2014-06-12
bill
2014-06-12
Como funciona
-
-F'[ (]'
Isso diz a
awk
para aceitar um espaço ou um parens aberto como o separador de campo. -
a[$1]=a[$1] $3 "\n"
Isso armazena as datas de login para cada usuário em uma matriz
a
. -
END{for (name in a)print name "\n" a[name]}
Quando terminamos de ler o arquivo, isso imprime os dados coletados.
Salvando a saída em um arquivo
Para salvar a saída em um arquivo, pode-se usar o redirecionamento shell . Assim:
awk -F'[ (]' '{a[$1]=a[$1] $3 "\n"} END{for (name in a)print name "\n" a[name]}' loginFile >newFile
Como lidar com uma data e uma vez
Suponha que o arquivo de entrada se pareça com:
$ cat loginFile2
bobby activityname 2014-05-12 15:20([email protected])
Para obter a data e a hora, execute:
$ awk -F'[ (]' '{a[$1]=a[$1] $3 " " $4 "\n"} END{for (name in a)print name "\n" a[name]}' loginFile2
bobby
2014-05-12 15:20
Lidando com vários espaços
Os exemplos acima todos tinham espaços únicos. Se houver um ou mais espaços entre os itens, então, para arquivos com data e hora, use:
awk -F' *[ (]' '{a[$1]=a[$1] $3 " " $4 "\n"} END{for (name in a)print name "\n" a[name]}' loginFile