GNU awk
(padrão no Ubuntu) - sozinho:
awk -vFPAT='https?:[^\s]+' 'BEGIN {PROCINFO["sorted_in"]="@ind_str_asc"} \
/\w+/{a[]} END{for(i in a) print i}' *.txt
-
Assumindo que todos os arquivos de entrada terminem em .txt
; se não, faça as mudanças necessárias no padrão glob *.txt
-
Variável FPAT
define a definição de campo usando Regex, definimos uma porção de registros começando com http
com um opcional s
depois disso, seguido por :
, até o próximo espaço em branco como um campo por o padrão Regex https?:[^\s]+'
-
awk
suporta apenas matrizes associativas que não são classificadas por padrão (bem, classificadas de acordo com um hash interno - este é um detalhe de implementação), estamos definindo a ordem de classificação da matriz a
de acordo com as strings de índice usando array associativo PROCINFO
com a chave sorted_in
tendo valor @ind_str_asc
by PROCINFO["sorted_in"]="@ind_str_asc"
. Se você quiser ordem decrescente, use PROCINFO["sorted_in"]="@ind_str_desc"
-
Finalmente, END{for(i in a) print i}
itera sobre os elementos da matriz a
e imprime as chaves da matriz classificada.
Se você quiser salvar a saída em um arquivo, por exemplo out.txt
:
awk -vFPAT='https?:[^\s]+' 'BEGIN {PROCINFO["sorted_in"]="@ind_str_asc"} \
/\w+/{a[]} END{for(i in a) print i}' *.txt >out.txt
EDITAR:
Se você quiser salvar a saída de cada arquivo processado em um arquivo correspondente com a extensão .txt
substituída por .doc
, use awk
variable FILENAME
para obter o nome do arquivo, sub(".txt$", ".doc", FILENAME
para fazer o arquivo renomeando e ENDFILE
para fazer o processamento da matriz no final do processamento de cada arquivo:
awk -vFPAT='https?:[^\s]+' 'BEGIN {PROCINFO["sorted_in"]="@ind_str_asc"} \
/\w+/{a[]} ENDFILE{sub(".txt$", ".doc", FILENAME); \
for(i in a) print i > FILENAME}' *.txt