Localizando dados de todos os arquivos na pasta

3

Eu tenho pasta que contém dados separados por pipe (|). Eu quero ter uma lista da 8ª coluna na primeira linha de cada arquivo na pasta junto com o nome do arquivo, seria bom se todos esses dados pudessem ser consolidados em um arquivo

    
por CoderAkki 03.03.2017 / 08:09

3 respostas

3

Para passar arquivos para awk , podemos usar o shell globstar. -F pode ser usado para definir um delimitador de campo, então -F'|' é o que precisamos. E, na medida em que apenas obter a primeira linha, usar nextfile é suficiente. Assim, podemos fazer:

awk -F'|' '{print FILENAME,$8;nextfile}' ./*

na pasta em que os arquivos estão localizados.

Deve-se notar que nextfile pode não ser suportado. Por exemplo, como Stephane observou, o Debian e seus derivados vêm com uma versão antiga do mawk , que não possui a opção nextfile as. No caso em que você precisa ter mais código awk portátil, você pode aproveitar a variável FNR . Por exemplo:

awk -F'|' 'FNR==1{print FILENAME,$8}'  ./*
    
por 03.03.2017 / 08:20
2

Embora eu ainda prefira a awk approach (mais legível, mais shell, mais eficiente), esse é um caso em que usar um loop de shell funcionaria relativamente bem:

for file in *; do
  IFS='|' read -r x x x x x x x text x < "$file" || continue
  printf '%s\n' "$file: $text" || exit
done
    
por 03.03.2017 / 10:45
0
find . ! -name . -prune -exec test -f {} \; -exec sh -c '
   printf "%s:%s\n" "$1" "$(head -q -n 1 "$1" | cut -d\| -f8)"
' {} {} \;
    
por 03.03.2017 / 09:53