파일에서 단어를 찾고 쉘 스크립트를 사용하여 .csv를 생성합니다.

파일에서 단어를 찾고 쉘 스크립트를 사용하여 .csv를 생성합니다.

여러 디렉터리에 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 명령과 정규식을 사용하여 단어를 배열에 저장하고 루프 내에서 각 아이디어의 수를 늘릴 수 있다고 생각하지만 각 아이디어의 두 번째 인수와 일치하는 정규식을 만드는 방법을 모르겠습니다. 수식을 배열에 저장하고 나중에 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한 줄씩 구문 분석하여 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

관련 정보