在尝试翻转一个由空格分隔的两部分的字符串时,我发现了两种不同的结果,具体取决于处理方式。
方法1:
for smaller_list in list_of_dictionaries2:
correct2 = defaultdict(list)
for d in smaller_list:
for k, v in d.items():
correct2[k].append(v)
empty.append(correct2)
方法2:
[defaultdict(<class 'list'>, {0: [3523, 7245], 1: [3524, 7246, 20898],
2: [3540, 7247, 20899], 4: [3541, 20901], 5: [3542, 7249, 20902],
3: [7248, 20900], 6: [7250]}),
defaultdict(<class 'list'>, {0: [3],1: [4], 2: [5], 3: [6]})]
有什么作用?我需要在方法1中解决什么?谢谢您的帮助!
答案 0 :(得分:2)
在正则表达式匹配项中有多余空格的第一个命令中,您难道没有发现明显的错字吗?
echo "ABCD EFGH" | awk '{print gensub ( /( .+ ) ( .+ )/, "\\2 \\1", "g", $0 ) }'
# ^ ^ ^ ^ incorrect spaces defined
它应该被定义如下。同样,您也不需要将$0
放在最后一个参数中,这是可以理解的并且是可选的,即,如果未明确提到$0
,则默认情况下,该操作将占据整个{{1 }}。
$0
答案 1 :(得分:1)
您已经对正则表达式为什么不起作用的原因进行了解释。因此,我只想指出您正在用GNU awk编写,而gensub()
在大多数其他awk中都不存在。
因此,出于可移植性考虑,我建议您以其他方式反转字段:
$ echo "ABCD EFGH" | awk '{for(i=NF;i;i--) o=o OFS $i; print substr(o,length(OFS)+1)}'
这将以相反的顺序遍历您的字段,并将它们附加到一个变量,该变量由输出字段分隔符分隔。然后,它打印该变量,并随即剥离OFS。它还可以用于2个以上字段。