2010/07/18

多行野郎の巻

なんかツールぽいものを作ってみた。
awk -f c.awk ja.catkeys en.catkeys
これで、en.catkeysのキーの内、ja.katkeysと同じものは置き換えて出力してくれるハズ(よく見たら、B_TRANSLATE_COMMENTに対応していないなぁ…出力時に\t\tの間に$3をいれればいいのかな?)。ソース変更のたびに、collectcatkeysなどでen.catkeys (ja.catkeysでも可)を作らないといけないけど、手で古いファイルからキーと値をコピペするよりは楽かも。
さらに出力部をいじくれば、2番目のファイルで新たに追加されたキーのみ、出力の末尾に追加することもできるかも????(配列に行を別々に入れて、END{}で出力????)
c.awk
BEGIN{
FS="\t"
}

#最初のファイル(ja.catkeys)のキー/値を読み込む。
FILENAME == ARGV[1]{
localedata[$1]=$4;
}

#2番目のファイル(en.catkeys)を出力。その際、前に読み込んだキー/値を調べて出力。
FILENAME == ARGV[2]{
if(NF==1){
print $0;
}else{
if (localedata[$1] !="") {
print $1 "\t"$2"\t\t"localedata[$1];
}else{
print $1 "\t"$2"\t\t"$4;
}
}
}
awkも久々だけど、sedのときよりは楽だったかな。連想配列の凄さを思い知りました。

catkeysの行並び変えは、1行目以外はどう並び変えても問題無いので、スクリプトで並び変えられるかも。

0 件のコメント:

コメントを投稿