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]*