每个人都要有一个骨灰级的爱好,不为金钱,而纯粹是为了在这个领域享受追寻真理的快乐。
分类: LINUX
2011-05-18 15:44:47
有这么两个文本,要求以文本a的第一个字段为比较,如果文本b的第一个字段与a不符合,那么打印出该行。
[解析]
首先NR==FNR对文本a进行处理,把$1的值作为下标放入数组a,next不会执行后面的语句,一直读到文本b不满足NR==FNR条件,这时判断文本b的$1是否存在于数组a中的下标中,显然文本b的第一行的$1是存在于数组a的下标中的,那么条件为真,再!,注意非真即为假,为假那么不会执行该pattern后面默认的{print]这个action动作,那么则不会输出该行,一直到第4行的$1并未存在于数组a的下标中,那么条件为假,非假为真,则执行默认的打印,输出了该行。或许下面的写法更符合规范和便于理解:
还有没有更简单的方法呢?有的,呵呵,利用pattern的特性,我写出了下面的语句,更短:
[解析]
给该数组赋予一个值为1,如果文本b的$1存在数组a中,那么数组a的值则为1,非真为假,则不输出,如果不存在数字a中,那么数组a的值是为0的,非假为真,则打印。