script awk para listar arquivos com nomes de arquivos especificados

0

Estou tentando escrever um script awk que tenha string como padrão e queira listar todos os arquivos em um diretório que tenha esse padrão em seus nomes. mas não sei como dizer à minha função awk para ler todos os nomes de arquivos em um diretório (e o comando find não me ajudará nesse caso). meu padrão de entrada é uma data em YYYYMMDD format e meu arquivo começa com um formato como YYYY-MM-DD .

Isso é o que estou tentando fazer no meu arquivo .awk :

#! /usr/bin/awk -f

BEGIN{
Directory="history/"

date="20180522"

validDate=substr(date,0,4)"-"substr(date,5,2)"-"substr(date,7,2)
printf Directory
system("find $Directory -maxdepth 1 -type f -name \"validDate*\" ") 
}

O problema é como informar system obter valores de gravação de $Directory e $validDate definidos antes.

    
por Nahid Bandi 27.05.2018 / 06:11

3 respostas

0

Depois de muita pesquisa e ajuda de amigos, encontrei a solução. Como um amigo ajudou com o meu erro nos comentários, eu postei isso para que os outros pudessem usar isso. Como Amadan diz:

You cannot use string interpolation ("....$Directory...") in awk. Use string concatenation: system("find " Directory " -maxdepth 1 -type f -name \"validDate*\" ")

Então atualizei meu script com:

#! /usr/bin/awk -f

BEGIN{
Directory="history/"

date="20180522"

validDate=substr(date,0,4)"-"substr(date,5,2)"-"substr(date,7,2)
printf Directory
system("find " $Directory " -maxdepth 1 -type f -name " validDate"*") 
}

E isso funciona! :):)

    
por 18.06.2018 / 14:35
0

Você parece querer usar awk para obter a data do usuário no formato YYYYMMDD e, em seguida, transformar isso no formato YYYY-MM-DD para fazer uma pesquisa de arquivo.

awk é mais adequado para análise de fluxo do que para programação interativa. Também não sabe como iterar através de uma hierarquia de arquivos.

Aqui está uma proposta que usa um script de shell para ler os dados do usuário e usa find para procurar os arquivos:

#!/bin/sh

thedate="$1"

if [ -z "$thedate" ]; then
    printf 'Enter year (YYYY): ' >&2
    read theyear
    printf 'Enter month  (MM): ' >&2
    read themonth
    printf 'Enter day    (DD): ' >&2
    read theday

    thedate="$theyear-$themonth-$theday"
fi

find /path/to/history -type f -name "*$thedate*"

Esse script pode ser executado com ou sem argumentos de linha de comando. Se o script detectar que foi usado com um argumento de linha de comando, ele assumirá que é uma string de data no formato correto e usará como está para procurar pelos arquivos.

    
por 28.05.2018 / 07:49
0

Você pode usar find de uma destas três maneiras:

De dentro do diretório history :

find . -maxdepth 1 -type f -name \*pattern\*

Do diretório logo acima, que contém o diretório history

find . -maxdepth 1 -type f -name \*pattern\*

De qualquer lugar:

find /path/to/history -maxdepth 1 -type f -name \*pattern\*

Você pode passar a entrada para o comando find como o padrão que você está procurando.

    
por 28.05.2018 / 06:20