运行它
我有一个输入文件:
A 23
A 45
A 32
A 61
A 78
B 23
B 45
B 32
B 61
B 78
C 23
**C 32
C 45**
C 61
C 78
第一列指定组,第二列为该组指定了一些值。
我想检查每个组的值顺序是否相同。
例如,A组的值为23,45,32,61,78。该组的值是组的相同顺序。但是,在C组中,违反了该顺序(BOLD),因此输出应只是" false"。
如果C组,则遵循值的顺序,输出将为" true"。
请注意,第一列中的组都是唯一的,没有重复的组。
!f { a[++i] = $2 } # save first sequence
NR>1 && $1!=p { f=1; i=1 } # set flag and reset index on new sequence
{ p=$1 } # save value of first column
f && a[i++]!=$2 { m=1; exit } # if number not in sequence, set m and exit early
END { print m?"false":"true" } # print false or true, depending on m
像awk -f script.awk file
此awk
应该有效:
awk '$1 != p {
if (!grp1 && grp)
grp1 = grp;
if (grp != grp1) {
print p " - false";
done = 1;
exit
};
grp = "";
p = $1
}
{
grp = grp ":" $2
}
END {
if (!done && grp != grp1)
print p " - false"
}' file
它打印:
C - false
另一个解决方案:
NR == 1 {
initial = $1
returnVal = ""
}
{
if (initial == $1) {
array[++i] = $2
} else {
if (anchor != $1)
ix = 0
anchor = $1
if (array[++ix] != $2) {
returnVal = 1
}
}
}
END {
print (returnVal) ? "false" : "true" ;
}