linux awk行到数组服从FPAT [关闭]

t9aqgxwy  于 2023-05-06  发布在  Linux
关注(0)|答案(1)|浏览(99)

**关闭。**这个问题是not reproducible or was caused by typos。目前不接受答复。

此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
昨天关门了。
Improve this question
我想使用AWK比较两个连续的CSV行(如果需要,然后合并它们)。因此,我将第1行存储到一个变量中,并希望将特定字段与下一行(假设字段3)进行比较。因为它不是一个简单的空格/逗号分隔的文件(字符串用引号括起来-FPAT = "([^ ]*)|('[^']+')"),我在拆分中使用了正则表达式-但它仍然不起作用。
我错过了什么?
以下是我的数据:

'a1' 'a2' 'a3' 'a4'
'b1' 'b2' 'b3' 'b4'
'c1' 'c2' 'c3' 'c4'
'd1' 'd2' 'd3' 'd4'

代码:

BEGIN {
        FPAT = "([^ ]*)|('[^']+')"
}
{
        print "Now: "$2

        split(old, exploded, /([^ ]*)|('[^']+')/)

        print "Before: "exploded[2]

        old=$0
}

该代码将空白打印为“before”行:-/
EDIT:添加所需输出。
现在我得到:

Now: 'a2'
Before: 
Now: 'b2'
Before:  
Now: 'c2'
Before:  
Now: 'd2'
Before:

我想得到:

Now: 'a2'
Before: 
Now: 'b2'
Before: 'a2'
Now: 'c2'
Before: 'b2'
Now: 'd2'
Before: 'c2'

我(稍后,不是这个问题的一部分)想做的是用mathing key变量(offset)在行上做一些事情:

(...)
      if (old_line[offset] == $offset) {
           // do stuff
      }
      else {
           print $0
      }
(...)
svdrlsy4

svdrlsy41#

多亏了tripleee,我修复了这个问题-我应该使用patsplit而不是split。一点RTFM-ing(我应该早点做的)帮助:)

相关问题