我可能会问一个微不足道的问题,但无法找到正确的方法。
我在多个服务器中进行ssh,并将/ etc / fstab中的预期nfs挂载与/ proc / mounts中的现有挂载进行比较。
VAR1=$(awk '!/^#/ && $3 == "nfs" {print $2}' /etc/fstab)
VAR2=$(awk '!/^#/ && $3 ~ /nfs[34]/ && $1 !~ /gfs/ {print $2}' /proc/mounts)
例如,来自/etc/fstab
:
/data1
/data2
/data3
来自/proc/mounts
:
/data1
/data2
如果所有坐骑都存在并且已安装,我必须打印一切正常,如果有一些丢失则将它们打印出来并重新安装。
我尝试与之比较:
awk 'FNR==NR {a[$1]; next} $1 in a' file1 file2 ( but not works with $VAR1/$VAR2 ).
嵌套循环也没有成功。
提前致谢。
答案 0 :(得分:2)
你可以得到这样的缺失坐骑:
comm -23 <(printf '%s\n' "$VAR1") <(printf '%s\n' "$VAR2")
这将打印仅在$VAR1
。
或者作为一个单行:
comm -23 <(awk '!/^#/ && $3 == "nfs" {print $2}' /etc/fstab) <(awk '!/^#/ && $3 ~ /nfs[34]/ && $1 !~ /gfs/ {print $2}' /proc/mounts)
答案 1 :(得分:0)
您可以通过以下方式获取$VAR1
和$VAR2
的结果:
for i in $VAR1 $VAR2; do echo $i; done \
| sort | uniq -c | awk '/\s+1/ {print $2}'
基本上,我们正在寻找仅提及一次的目录。可能有一种更优雅的方式来做到这一点,但这应该可以得到你想要的东西。