複数のディレクトリに 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 関数から 2 番目のパラメーターを取得し、見つかった各ファイルに対して秒パラメーターを使用して、idea.js ファイルと同じディレクトリーに対応する .csv ファイルを生成する必要があります。
Idea, descripcion
"Some idea1 tag abc","Some idea1 description1 abc"
"Some idea2 tag abc","Some idea2 description2 abc"
grepコマンドと正規表現を使用して単語を配列に格納し、ループ内の各アイデアの数を増やすことができると思いますが、各アイデアの2番目の引数に一致する正規表現を作成する方法がわかりません。式を配列に保存し、後で idea.js ファイルと同じディレクトリに記載されている構造を使用して新しい .csv ファイルにエクスポートする方法です。助けてください。
答え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
1行ずつ解析して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