- 締切済み
awk フィールドへの関連付け
new X100 Y200 Z300 X111 Z333 old X100 Y200 Z300 X111 Y200 Z300 を同じものとして比較したいのです フィールドそのものはレコード2は違いますが new の レコード2のYは200なので 同じものです 正規表現などを使ってフィールド内のX Y Zをばらばらに読ませることは出来ました splitでそれを行うと X[1000] Y[500] Z[3000]などの差もうまれますし それぞれがどのフィールドにあったかを記憶させておく方法などが解りません 教えてください
- みんなの回答 (2)
- 専門家の回答
みんなの回答
ちょっと気になったんですが、 > X[1000] Y[500] Z[3000]などの差もうまれますし なぜそれが問題になりますか?単純に、 $0~/(new)|(old)/{ getline split($0,dat1) getline split($0,dat2) } とすれば、データは以下の順に連想配列に格納されるので、dat1[1]とdat2[1]を比較すれば済みますよね。 dat1[0]=X100 dat1[1]=Y200 dat1[2]=Z300 dat2[0]=X111 dat2[1]=Y200 dat2[2]=Z300
- kmee
- ベストアンサー率55% (1857/3366)
> フィールド内のX Y Zをばらばらに読ませることは出来ました それができたのなら、 連想配列を使って if ( X != "" ) { a["X"]=X ;}とかして(変数XにはXの値が入っているとして)、 ・項目があったら最新情報に更新 ・項目が無かったら前の値を保持 で if ( a["X"] == b["X"] && a["Y"] == b["Y"] && a["Z"] == b["Z"] ) { 同じ } else { 違う } みたいな判定するとか print "X" a["X"] "Y" a["Y"] "Z" a["Z"] 等と省略されている分を全部補ったファイルを作ってdiffで比較するとか。
補足
ありがとうございます これでいけそうな気はするのですが、 パースエラーが出てうまく動きません