首页 > 解决方案 > 字符串变量覆盖而不是在 for 循环中连接

问题描述

语境

我正在尝试编写一个小 awk 程序来分析我的 PokerStars 手牌历史。手牌历史存储在文本文件中,格式如下:

PokerStars Hand #225343166937:  Hold'em No Limit ($0.01/$0.02 USD) - 2021/03/30 16:14:07 ET
Table 'Pippa V' 6-max Seat #2 is the button
Seat 2: user1 ($2.12 in chips) 
Seat 3: user2 ($2.28 in chips) 
Seat 4: me ($2 in chips) 
Seat 5: user3 ($1.95 in chips) 
Seat 6: user4 ($2.06 in chips) 
user2: posts small blind $0.01
me: posts big blind $0.02
*** HOLE CARDS ***
Dealt to me [7d 9c]
user3: folds 
user4: folds 
user1: raises $0.04 to $0.06
user2: folds 
me: folds 
Uncalled bet ($0.04) returned to user1
user1 collected $0.05 from pot
user1: doesn't show hand 
*** SUMMARY ***
Total pot $0.05 | Rake $0 
Seat 2: user1 (button) collected ($0.05)
Seat 3: user2 (small blind) folded before Flop
Seat 4: me (big blind) folded before Flop
Seat 5: user3 folded before Flop (didn't bet)
Seat 6: user4 folded before Flop (didn't bet)



PokerStars Hand #225343172788:  Hold'em No Limit ($0.01/$0.02 USD) - 2021/03/30 16:14:17 ET
Table 'Pippa V' 6-max Seat #3 is the button
Seat 2: user1 ($2.15 in chips) 
...

(用户名已更改以尊重玩家隐私)

每条记录 (=hand) 由三个换行符分隔。我尽可能地将手分成记录,然后遍历每一行以将相关数据保存到变量中并打印它们。我的小 awk 程序如下所示:

BEGIN{
  RS="\n\r\n\r\n\r\n";
  FS="\n";
  OFS=",";
  print "Hand ID,Game Type,Time,Holecards";
}
{
  for (i = 1; i <= NF; i++)
  {
    if ($i ~ /^PokerStars Hand/)
    {
      split($i, aHand, " ");
      handID = aHand[3];
      gameType = aHand[5]" "aHand[6]" "aHand[7]" "aHand[8];
      dateTime = aHand[10]" "aHand[11]" "aHand[12];
    }
    if ($i ~ /^Dealt to /)
    {
      split($i, aHoleCards, " ");
      holeCards = aHoleCards[4]" "aHoleCards[5];
    }
  }
  print(handID, gameType, dateTime, holeCards);
  #printf("%s, %s, %s, %s\n", handID, gameType, dateTime, holeCards); # Same problem here
}

问题

我期望得到的输出(第一手)是:

Hand ID,Game Type,Time,Holecards
#225343172788:,No Limit ($0.01/$0.02 USD),2021/03/30 16:14:17 ET,[7d 9c]

但是,输出是不同的。对于第一条记录,变量handIDgameTypedateTime似乎是空的,而holeCards打印出来的。然后其他变量显示在第二行,但以某种方式被holeCards第二条记录的变量“覆盖”:

Hand ID,Game Type,Time,Holecards                                                                      
,,,[7d 9c]                                                                                                
,[Kd As]72788:,No Limit ($0.01/$0.02 USD),2021/03/30 16:14:17 ET

我希望我的描述不会太混乱。我对结果感到非常困惑。我尝试使用printf而不是,print但结果是一样的。我怀疑我在这里搞砸了一些简单的事情。

标签: linuxawk

解决方案


推荐阅读