Problema 1:
Processe os arquivos residentes em /path , cujo nome começa com 201 , seguido por um único dígito entre 2 e 6 , seguido por qualquer caractere.
Divida cada linha no caractere / e componha uma linha com os campos 5 , 6 , 7 e 8 com / entre eles, seguido por ",0,0,0" string.
Armazene essa linha, e quaisquer outras subseqüentes, em um arquivo chamado de arquivo cujo nome é archives_201 seguido pelo mesmo dígito único encontrado anteriormente no nome do arquivo de entrada, com extensão .csv .
Solução 1:
awk -F/ '
FNR==1 {match(FILENAME, /\/(201[2-6])/, m)}
{print $5"/"$6"/"$7"/"$8",0,0,0" >> "archives_"m[1]".csv"}
' /path/201[2-6]*
Comentários:
Como você não fornece arquivos de entrada de amostra e a saída desejada, tive que fazer algumas suposições em vários pontos.
Não tenho ideia do que você está tentando realizar: > ${8:0:4}"_export_0504.csv" .
Piping find resulta em awk deixa-me intrigado: quer que awk leia realmente cada ficheiro ou apenas processe uma lista de texto? Se este último, a composição rígida dos campos ($5"/"$6"/"$7"/"$8) significa que você espera que todos os arquivos estejam no mesmo diretório, então por que usar find ?
Assumi que não há nenhuma parte do caminho, além do nome do arquivo, que comece com a string de pesquisa 201[2-6] . Eu assumi que você deseja adicionar ( >> ) várias linhas ao mesmo arquivo, em vez de sobrescrevê-lo, se necessário ( > ). Eu assumi que todos os arquivos estão no mesmo diretório e eu assumi que awk é para trabalhar em arquivos conteúdos ao invés de em arquivos nomes .
A escolha de / como separador de campos sugere essa última hipótese, então vou tentar resolver esse problema também.
Problema 2:
Processe os nomes dos arquivos residentes em /path , cujo nome começa com 201 , seguido por um único dígito entre 2 e 6 , seguido por qualquer caractere.
Divida cada nome de arquivo no caractere / e componha uma linha com o 5º, 6º, 7º e 8º componentes (preservando o / entre eles), seguido por uma string ",0,0,0" .
Armazene aquela linha, e quaisquer outras subseqüentes, em um arquivo chamado archives_201 seguido pelo mesmo dígito único encontrado anteriormente no nome do arquivo, com a extensão .csv .
Solução 2:
awk -F/ '
FNR==1 {
match(FILENAME, /\/(201[2-6])/, m);
$0=FILENAME;
print $5"/"$6"/"$7"/"$8",0,0,0" >> "archives_"m[1]".csv"
}
' /path/201[2-6]*