Eu não faço isso com frequência, e quando eu faço é sempre sensível ao tempo. Eu tenho o script sed abaixo que extrai um padrão numérico de mais de um milhão de arquivos. Eu preciso lançar isso para o AWK, então quando o padrão correspondente é encontrado, ele imprime o nome do arquivo onde foi encontrado. O número da linha seria ótimo, mas não seria ganancioso.
saída desejada
Nome do arquivo1 000-323423-33
Nome do arquivo2 000-323423-33
Nome do arquivo3 000-323423-33
Já tentei vários métodos mas nada funcionou, alguém com mais experiência pode dar uma orientação adequada? Agradeço antecipadamente!
#!/bin/sh
#shopt -s nullglob
FILES=/mnt/c/temp/1/*.txt
for f in $FILES
do
echo "Processing $f"
sed -nr \
-e '/[0-9]{3}-[0-9]{6}-[0-9]{2}/{
s/.*([0-9]{3}\-[0-9]{6}\-[0-9]{2}).*/\1/
G
p
}' $f
done
Parece que sua tarefa é o que
grep
está fazendo. Se você realmente não quiser os dois pontos, substitua-os por espaço usandotr
, supondo que os dois pontos não existam nos nomes dos arquivos.A saída será como:
@thanasisp tem razão,
grep
é ideal para este trabalho.Com awk, você pode escrever
ref: https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html
Com tantos arquivos, você pode receber um erro de "lista de argumentos muito longa". É quando você precisa
find