请帮我解读正则表达式 -
'!_[$0]++'
它用于从以下用法获取MSISDN(从包含MSISDN列表的文件开始一次一个):
awk '!_[$0]++' file.txt
答案 0 :(得分:6)
它不是正则表达式,它是算术和布尔表达式。
$0
=当前输入行_[$0]
=一个关联数组元素,其键是输入行_[$0]++
=每次遇到重复行时都会增加该数组元素,但计算结果为原始值!_[$0]++
=布尔反转,因此如果值最初为0或空字符串则返回true,否则返回false 所以这个表达式在第一次遇到一行时是真的,每隔一次都是假的。由于表达式后没有动作块,默认情况下是在表达式为true时打印行,在false时跳过它。
因此,这会打印输入文件,并省略重复项。
答案 1 :(得分:1)
'true'- then the line will be printed
'_[$0]++'- associative array will be incremented everytime when $0 is present.means it will set the number of times each line is repeated.
'!_[$0]++'-this will be true when a line is inserted in the associative array for the firsttime only and the rest of the times it will resolve to false ultimately not printing the line.
因此不会打印所有重复的行。
答案 2 :(得分:1)
这不是正则表达式。此特定命令会在第一次找到它们时打印唯一的行。
_
在此处用作数组,$0
表示整行。假设数组元素的默认数值是0
(它在技术上是一个空字符串,但在数字上下文中它被视为0),第一次看到一行时,就会打印该行(从{{1}开始)是假的,_[$0]
将是真的。每次看到一行时该命令都会递增(打印后 - awk的默认命令是打印),因此下次当您看到!_[$0]
行将_[$0]
并且不会打印该行时< / p>