在不同的目录中存在许多具有这种结构的文件,这些文件的命名等于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");
...
...
...就像这样...许多想法及其相应的想法描述。
有必要从每个 get.idea 函数获取第二个参数,并在与 idea.js 文件相同的目录中创建相应的 .csv 文件,并为每个找到的文件使用秒参数,如下所示:
Idea, descripcion
"Some idea1 tag abc","Some idea1 description1 abc"
"Some idea2 tag abc","Some idea2 description2 abc"
我认为使用 grep 命令和正则表达式将单词存储在数组中并在一个循环内增加每个想法的数量是可以完成的,但我不知道如何创建与每个想法的第二个参数匹配的正则表达式以及如何存储在一个数组中,稍后导出到一个新的 .csv 文件,其中提到的结构位于与 idea.js 文件相同的目录中。你能帮助我吗。
答案1
$ sed -n '/^get\.idea/s/^.*(\(.*\)).*/\1/;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"
我们通常sed
会去除所有不相关的内容,然后awk
通过解析每隔一行来创建 CSV 文件。
答案2
与单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
输出:
Idea, Description
"Some idea1 tag abc","Some idea1 description1 abc"
"Some idea2 tag abc","Some idea2 description2 abc"
满足需求的扩展方法“在找到idea.js
文件的同一目录中创建相应的 .csv 文件”:
创建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' _ {} \;
将路径更改为创建的~/idea_to_csv.awk
实际位置idea_to_csv.awk