Encontre palavras em um arquivo e gere .csv com elas usando scripts de shell

0

Existem muitos arquivos com esta estrutura dentro de diretórios diferentes, os arquivos são nomeados iguais a idea.js:

get.idea("tagIdea1","Some idea1 tag abc");
get.idea("idea1","Some idea1 description1 abc");
get.idea("tagIdea2","Some idea2 tag abc");
get.idea("idea2","Some idea2 description2 abc");
...
...

... Então, assim ... Muitas idéias com sua descrição de ideia correspondente.

É necessário obter o segundo parâmetro de cada função get.idea e criar seu arquivo .csv correspondente no mesmo diretório que foi encontrado no arquivo idea.js com esses segundos parâmetros para cada arquivo encontrado da seguinte forma:

Idea, descripcion
"Some idea1 tag abc","Some idea1 description1 abc"
"Some idea2 tag abc","Some idea2 description2 abc"

Eu acho que com o comando grep e uma expressão regular armazenando as palavras em uma matriz e dentro de um ciclo aumentando o número para cada ideia pode ser feito, mas não sei como criar a expressão regular que corresponde ao segundo parâmetro para cada ideia e como o armazenamento em uma matriz será posteriormente exportado para um novo arquivo .csv com a estrutura mencionada no mesmo diretório que foi encontrado nos arquivos idea.js. Você pode me ajudar.

    
por Carlos 04.05.2018 / 18:23

2 respostas

0

$ sed -n '/^get\.idea/s/^.*(\(.*\)).*//;p' input | awk -F, 'BEGIN {print "Idea, Description";OFS=","} (NR % 2 ) == 1 {save=$2} (NR % 2) ==0 {print save, $2}'
Idea, Description
"Some idea1 tag abc","Some idea1 description1 abc"
"Some idea2 tag abc","Some idea2 description2 abc"

Usamos sed para remover todo o conteúdo irrelevante e, em seguida, usamos awk para criar seu arquivo CSV analisando todas as outras linhas.

    
por 04.05.2018 / 18:56
0

Com o comando único awk :

awk 'BEGIN{ print "Idea, Description"; FS = OFS = "," }
     { desc = substr($2, 1, length($2) - 2) }
     { if ($1 ~ /"tag/){ tag = desc } else { print tag, desc } }' idea.js

A saída:

Idea, Description
"Some idea1 tag abc","Some idea1 description1 abc"
"Some idea2 tag abc","Some idea2 description2 abc"

Abordagem estendida para cobrir o requisito "crie seu arquivo .csv correspondente no mesmo diretório encontrado em idea.js file" :

Crie o script idea_to_csv.awk :

#!/bin/awk -f

BEGIN{ print "Idea, Description"; FS=OFS="," }
{ desc = substr($2, 1, length($2)-2) }
{ if ($1 ~ /"tag/){ tag = desc } else { print tag, desc } }
find . -type f -name "idea.js" -execdir sh -c 'awk -f ~/idea_to_csv.awk "$1" > idea.csv' _ {} \;

Altere o caminho ~/idea_to_csv.awk para sua localização real, onde idea_to_csv.awk foi criado

    
por 04.05.2018 / 19:14