(課題1)
よみがなが、inoueの漢字名だけを抽出。
----------------------
$ cat test1.txt
井上,東京都,inoue
山田,神奈川県,yamada
既定@toshio ~
$ awk 'BEGIN { FS = ","}/inoue/{ print $1 }' test1.txt
井上
-------------------------
BEGIN { FS = ","}は、BEGINが初期処理で、FSで区切り文字を指定します。
{}は一行単位を区切り文字で、あとは、PerlやPHPやっていれば、直感的に
わかるでしょう。
これが、洋楽みたいに名前にカンマが入ると工夫が必要。
行数を表示したファイルで、カラムが指定数以上のものは、別ルーチンで
抽出することになります。まあ、一変にできる、Perlスクリプト書いた方が
賢いとおもうけど。
結局MSオフィスでも、Perlでもやることはいっしょです。
(課題2)
楽曲商品CSVから、「曲名」と「アーティスト名」を抜き出す。
ただし、「曲名」「アーティスト名」に「,」が入ってるので注意が必要。
以下の矢印「→」はコマンドラインのオペレーションの説明文になります。
----------------------
$ cat test2.txt
連番,曲名,アーティスト,作詞,作曲
A0001,"Hello,Again","fine band,and toshi",としお,としお
A0002,震える愛,toshi m style,としお,としお
→ まず、ヘッダ部とデータ部のフォーマットを確認。行が"A"で始まるのがデータ部。
既定@toshio ~
$ grep -v '"' test2.txt | grep ^A
A0002,震える愛,toshi m style,としお,としお
→カラムの中に「"」が、ないデータを抽出。-vを指定することで、「"」を含まないデータを抽出。「^A」で、行頭が「A」で始まるデータ部のみを抽出。
既定@toshio ~
$ grep -v '"' test2.txt | grep ^A |awk 'BEGIN{ FS = "," }{ print $2 "," $3 }' >
result2.txt
→曲名、アーティストは、2番目と3番目のカラムなので、カンマ区切りで2番目、3番目のデータをCSV形式を保持するため、カンマを付け加えて抽出。
既定@toshio ~
$ cat result2.txt
震える愛,toshi m style
→結果出力ファイルに、「曲名」、「アーティスト」が、出力されていることを確認。
既定@toshio ~
$ grep '"' test2.txt | grep ^A
A0001,"Hello,Again","fine band,and toshi",としお,としお
→データ部に「"」が存在するデータを確認。
既定@toshio ~
$ grep '"' test2.txt | grep ^A |awk 'BEGIN{ FS = "," }{ print $2 "," $3 "," $4
"," $5 }' >> result2.txt
→今回は「"」が存在するデータは1件なので、黙視で確認して、カンマ区切りで2,3,4,5番目のデータをカンマを付け加えて出力。ファイル出力は上書きモードでないと、先に書きこんだデータが消えてしまいます。
既定@toshio ~
$ cat result2.txt
震える愛,toshi m style
"Hello,Again","fine band,and toshi"
→結果ファイルで、二つの曲の「曲名」と「アーティスト名」を出力成功。
とりあえずは、順番は気にしないで出力していますが、順番が必要な場合は、連番も出力し、sortコマンドで整形します。
----------------------
(課題3)
csvファイルをtsvファイルに変換する。音楽業界では、特殊な記号を使う商品が多いので、汎用的なタブを区切り文字にする慣習ができつつある。
----------------------
既定@toshio ~
$ cat result2.txt
震える愛,toshi m style
"Hello,Again","fine band,and toshi"
→ファイルの中身の確認
既定@toshio ~
$ grep -v '"' result2.txt | awk '{sub(/,/,"\t"); print $0}' > result2.tsv
→「"」がないものについては、{sub(/,/,"\t"); print $0}の構文で、$0の中の「,」を「タブ(\t)」に変換。
既定@toshio ~
$ cat result2.tsv
震える愛 toshi m style
→出力tsvファイルを確認。
既定@toshio ~
$ grep '"' result2.txt | awk 'BEGIN{ FS=","}{ print $1 "," $2 "\t" $3 "," $4 }
' >> result2.tsv
→「"」があるものに関して、一括変換が無理なので、「,」で区切って、記号を保管しながら書きこむ。
既定@toshio ~
$ cat result2.tsv
震える愛 toshi m style
"Hello,Again" "fine band,and toshi"
→出力結果を確認。
----------------------