awk 精确变量匹配,打印剩余行
awk exact variable match, print remaining lines
我有两个文件,如果 FILE2 的 column2 数据(/usr, /opt/var) 在 FILE1 的 column2 中可用,则打印 FILE1 的剩余行。
行顺序会有所不同,列内容也会因服务器而异。
文件 1
JUDI /usr 94
JUDI /var 78
JUDI /usr/openv 80
JUDI /opt 85
JUDI /opt/var 75
文件 2
JUDI /usr 93
JUDI /opt/var 70
输出为
JUDI /var 78
JUDI /usr/openv 80
JUDI /opt 85
我试过这段代码:
A=`awk '{print }' FILE2`
for i in $A
do
x=$i
nawk ' !~ /^"'$\x'"/ {print [=13=]}' FILE1
done
$ awk 'NR==FNR{a[]++} !( in a)' file2 file1
JUDI /var 78
JUDI /usr/openv 80
JUDI /opt 85
已在 FreeBSD 中测试,但应该适用于几乎所有 awk 实现。
这里的想法是,您单步执行第一个文件,以第二个字段作为键填充一个数组,然后单步执行第二个文件,仅打印第二个字段不是数组中键的行。
我有两个文件,如果 FILE2 的 column2 数据(/usr, /opt/var) 在 FILE1 的 column2 中可用,则打印 FILE1 的剩余行。
行顺序会有所不同,列内容也会因服务器而异。
文件 1
JUDI /usr 94
JUDI /var 78
JUDI /usr/openv 80
JUDI /opt 85
JUDI /opt/var 75
文件 2
JUDI /usr 93
JUDI /opt/var 70
输出为
JUDI /var 78
JUDI /usr/openv 80
JUDI /opt 85
我试过这段代码:
A=`awk '{print }' FILE2`
for i in $A
do
x=$i
nawk ' !~ /^"'$\x'"/ {print [=13=]}' FILE1
done
$ awk 'NR==FNR{a[]++} !( in a)' file2 file1
JUDI /var 78
JUDI /usr/openv 80
JUDI /opt 85
已在 FreeBSD 中测试,但应该适用于几乎所有 awk 实现。
这里的想法是,您单步执行第一个文件,以第二个字段作为键填充一个数组,然后单步执行第二个文件,仅打印第二个字段不是数组中键的行。