0

シェルスクリプトでプログラミングを始めたばかりで、次のようなファイルがあります。

stuff that doesn't matter
doesn't matter
matter

*LINE 35*School: xxxxx -> NAME: xxxxx AGE: xxx DESCRIPTION: xxxxxxxxxx
School: yyyyy -> NAME: yyyyy AGE: yyy DESCRIPTION: yyyyyyyyyy
School: zzzzz -> NAME: zzzzz AGE: zzz DESCRIPTION: zzzzzzzzzz
School: aaaaa -> NAME: aaaaa AGE: aaa DESCRIPTION: aaaaaaaaaa
6 lines of stuff after the important information

これにおける私の主な目標は、これらすべての学生を mysql データベースに移行することです。私のコードは次のようになります。

nstudents=(( $(wc -l file | cut -d ' ' -f1) - 41) #41 comes from 35+6
i=1
while [ $i != $nstudents ]
do
$school=[I don't know how to extract school number $i]
$name=[I don't know how to extract name number $i]
$age=[I don't know how to extract age number $i]
$desc=[I don't know how to extract description number $i]
mysql #upload
$i= (( $i + 1 ))
done

これを行うには sed などを使用する必要があることは知っていますが、その方法がわかりません。前もって感謝します。

4

1 に答える 1

1

データが実際にどのように見えるかについての最良の推測に基づいて、問題に対するシェルのような解決策を示すために、これを試してください

cat inputFile
stuff that doesn't matter
doesn't matter
matter

*LINE 35*School: xxxxx -> NAME: xxxxx AGE: xxx DESCRIPTION: xxxxxxxxxx
School: yyyyy -> NAME: yyyyy AGE: yyy DESCRIPTION: yyyyyyyyyy
School: zzzzz -> NAME: zzzzz AGE: zzz DESCRIPTION: zzzzzzzzzz
School: aaaaa -> NAME: aaaaa AGE: aaa DESCRIPTION: aaaaaaaaaa
6 lines of stuff after the important information

awk -F: '/School/{
    gsub(/ -> /, ""); sub(/School/,""); sub(/NAME/,"")
    sub(/AGE/,""); sub(/DESCRIPTION/,"")
    printf("insert into MyTable values (\"%s\", \"%s\", \"%s\", \"%s\")\n",  $2, $3, $4, $5)     
}' inputFile

出力

insert into MyTable values (" xxxxx", " xxxxx ", " xxx ", " xxxxxxxxxx")
insert into MyTable values (" yyyyy", " yyyyy ", " yyy ", " yyyyyyyyyy")
insert into MyTable values (" zzzzz", " zzzzz ", " zzz ", " zzzzzzzzzz")
insert into MyTable values (" aaaaa", " aaaaa ", " aaa ", " aaaaaaaaaa")

これが気に入ったら、grymoire awk チュートリアルを見てください

IHTH

于 2013-04-20T02:34:09.057 に答える