2014-09-05 2 views
1

사소한 질문을하고 있지만 올바른 방법을 찾을 수없는 경우 일 수 있습니다.두 결과를 비교하고 존재하는 경우 누락 된 부분을 인쇄하십시오.

여러 서버에서 ssh'ing하고 예상되는 nfs 마운트를/etc/fstab에서/proc/mounts의 기존 마운트와 비교합니다.

/data1 
    /data2 
    /data3 

그리고 /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 

모든 마운트가 존재하고 내가 모두 확인하고, 경우 일부 빠진 것을 인쇄가 장착 된 경우 그들을 밖으로 인쇄하고 다시 설치하십시오. 중첩 루프와

awk 'FNR==NR {a[$1]; next} $1 in a' file1 file2 (but not works with $VAR1/$VAR2). 

도 성공하지 않았다 :

내가 함께 비교를 위해 일했습니다.

미리 감사드립니다.

+0

원본 파일 ('/ etc/fstab' 및'/ proc/mounts')에 awk 패턴을 사용하여 누락 된 마운트 포인트 목록을 얻으십시오. 아마도 첫 번째 루프에서 그 배열에'$ 3 '을 사용하고 싶을 것이다. –

+0

@Etan 죄송합니다, 더 자세히 설명해 주시겠습니까 – user1607856

+0

당신은이 목적을 위해 awk 패턴을 사용하려고했지만 변수에 대해서는 작동하지 않는다고하셨습니다. 사실이긴하지만 파일 이름을 처리하고 파일 이름을 처리하는 두 개의 awk 스크립트를 작성했습니다. awk를 세 번 실행하는 대신 한 번 실행하십시오. 인수로 두 파일을주고 첫 번째 파일에 대해'FNR == NR' 매핑 루프를 수행하고 두 번째 파일에 대한 검사를 수행하고 검사에 실패한 행만 출력하십시오. –

답변

2

당신은 다음과 같이 누락 된 마운트를 얻을 수 있습니다 :

comm -23 <(printf '%s\n' "$VAR1") <(printf '%s\n' "$VAR2") 

이 단지 $VAR1에있는 선을 인쇄합니다.

또는

은 한 - 라이너 : 당신은 $VAR1$VAR2에서 이런 식으로 결과를 얻을 수 있습니다

comm -23 <(awk '!/^#/ && $3 == "nfs" {print $2}' /etc/fstab) <(awk '!/^#/ && $3 ~ /nfs[34]/ && $1 !~ /gfs/ {print $2}' /proc/mounts) 
+1

새 줄을 다시 추가해야 할 것 같아요. 예를 들어, 다음과 같이 입력하십시오 : $ 3 == "nfs" 'echo $ VAR1 | sed -r 's/\ s +/\ n /'', 첫 번째 예제. – zerodiff

+0

좋은 지적, 고정. – l0b0

0

: 기본적으로

for i in $VAR1 $VAR2; do echo $i; done \ 
    | sort | uniq -c | awk '/\s+1/ {print $2}' 

을, 우리는 언급 한 디렉토리를 찾고 일단. 이것을하는 더 우아한 방법이 있을지도 모르지만, 그것은 당신이 원하는 것을 얻을 것입니다.

관련 문제