- 締切済み
awkの友達 正規表現
以前教えていただいたsplitで X100Y200Z300* をそれぞれ X[1]Y[1]Z[1] に入れたいです [A-Z]にすると X[1]X[2] に 100 200 と入ってしまいます またXYZはXZのように省略されることもあります どのようにすればXYZをX[ ]Y[ ]Z[ ] に入れられるか教えてください お願いします
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- trapezium
- ベストアンサー率62% (276/442)
あー、 > T100U200V300W400X500Y600Z700*T111U222V333*(レコー > ド)T100U200V300W400X500Y600Z700*T1111U2222V3333* > という2つのデータの比較です この括弧に挟まれた(レコード)というのは何を意味してます? 普通に一行目、二行目? それとも * に挟まれたデータが続いてるという意味? > R1 R2どちらも項目が同じ時は省略されています これも見たところ何が R1,R2 なのか判断できません。まあニュアンスは分かるけれども。 > 順序が決まっていないので、省略されるかされないかが解らないた ということなので、こんなデータのとき、3行目で != 判断するようにしてみたが? 問題は4,5行目みたいのか。叩き台にでもしてくれ T100U200V300W400X500Y600Z700*T111U222V333* Z700Y600X500W400V300U200T100*T111U222V333* T100U200V300W400X500Y600Z700*T555U777V888* T100U200V300W400X500Y600*T555U777V888* U200V300W400X500Y600Z700*T555U777V888* BEGIN{FS="\*"} { for (j=1; j<NF; j++) { split($j,b,"[A-Za-z]+"); split($j,a,"[0-9]+"); for (i in a) if (a[i]) n[a[i]]=b[i+1]; for (i in n) { if (c[j,i] != n[i]) f=1; c[j,i]=n[i]; printf "%s=%d ",i,n[i]; } } if (NR>1 && f) printf "Not equal"; f=0; # delete n; print ""; }
- notnot
- ベストアンサー率47% (4900/10359)
>X100Y200Z300*をそれぞれ >X[1]Y[1]Z[1]に入れたいです スクリプト全体を見直した方が良いと思います。 言い換えると、「X[1]Y[1]Z[1]に入れたいです」と思った時点ですでに間違った方向に進んでいる。 全体として何をしたいのでしょうか?
お礼
ありがとうございます 考え直してみます
補足
回答ありがとうございます 例1 T100U200V300W400X500Y600Z700*T111U222V333*(レコード)T100U200V300W400X500Y600Z700*T1111U2222V3333* という2つのデータの比較です R1 R2どちらも項目が同じ時は省略されています つまり T100U200V300W400X500Y600Z700*T111U222V333* というのは T100U200V300W400X500Y600Z700*T111U222V333W400X500Y600Z700* を意味しています なので例1は違いますが 例2 T100U200V300W400X500Y600Z700*T111U222V333*(レコード)T100U200V300W400X500Y600Z700*T111U222V333Z700* は同じです 順序が決まっていないので、省略されるかされないかが解らないため、 フィールドとフィールドとで比べると同じ意味でもはじかれるかもしれないので 質問させていただきました
お礼
スクリプトありがとうございますm(_ _)m
補足
>この括弧に挟まれた(レコード)というのは何を意味してます? >普通に一行目、二行目? >それとも * に挟まれたデータが続いてるという意味? FSが*でRSは改行以外の任意です 全角でレコードでやったりもしました >これも見たところ何が R1,R2 なのか判断できません。まあニュアンスは分か>るけれども。 レコードの1つ目がR1で2つ目がR2です レコード1つ目に比較元とレコード2に比較対象をおいてやっています 考えていただいたスクリプト参考にさせていただきます