2017-11-24 13 views
1

Data2에 포함되지 않은 Data1의 값을 검색하려고합니다. 내가 두 변수를 포함하는 :쉘 스크립트 : 원본 목록에 대상 목록에 누락 된 데이터가 있는지 검색하는 방법

Data1="PF10_SBCA-B 
PF5_SBCA-G 
PF10_SBCE-F 
PF10_SBCC-W" 

Data2="PF5_SBCA-B 
PF10_SBCE-F 
PF10_SBCA-B 
PF5_SBCC-W" 

내가

res=$(diff <(echo "$Data1") <(echo "$Data2")); 
echo "$res" 

내가

1c1,4 
< 
--- 
> PF5_SBCA-B 
> PF10_SBCE-F 
> PF10_SBCA-B 
> PF5_SBCC-W 

대신

,691 해보
PF5_SBCA-G 
PF10_SBCC-W 

도와주세요. 고마워요

+0

당신이 사용하고있는'diff'의 버전을 언급하는 것이 중요 할 수 있습니다. 왜냐하면 [당신이하는 것과 같은 출력을 얻지 못하기 때문입니다] (https://ideone.com/zsWJku). – Aaron

+0

입력 정렬을 시도하십시오. 예 :'diff <(echo "$ Data1"| sort) <(echo "$ Data2"| sort)'. 그래도 원하는 것을 정확히주지는 않습니다. –

+0

난이 출력처럼 가지고 PF10_SBCA-B-F PF10_SBCE PF5_SBCA-B-W PF5_SBCC PF10_SBCA-B-W PF10_SBCC @WilliamPursell 가까이되었다 – user6223604

답변

0

두 번째 목록의 값을 연관 배열로 읽은 다음 배열의 첫 번째 목록에서 값을 확인하십시오. $ 데이터 1의 값에

declare -A data2 
while IFS= read -r key; do 
    data2[$key]= 
done <<< "$Data2" 

while IFS= read -r key; do 
    [[ -v data2[$key] ]] || echo "$key not in Data2" 
done <<< "$Data1" 
0

단순히 루프가 $의 데이터 2에 존재하는지 확인 :

#!/bin/bash 
# 
Data1="PF10_SBCA-B 
     PF5_SBCA-G 
     PF10_SBCE-F 
     PF10_SBCC-W" 

Data2="PF5_SBCA-B 
     PF10_SBCE-F 
     PF10_SBCA-B 
     PF5_SBCC-W" 

for value in $Data1 
do 
    if [ $(echo $Data2 | grep -c $value) -eq 0 ] 
    then 
     echo $value 
    fi 
done 

출력 :

PF5_SBCA-G 
PF10_SBCC-W 
5

간단히과 comm + sort 명령 :

comm -23 <(sort <<<"$Data1") <(sort <<<"$Data2") 

출력 :

PF10_SBCC-W 
PF5_SBCA-G 

시놉시스 : comm [OPTION]... FILE1 FILE2

  • -2 - 억제 2 열 (FILE2 고유 선)
  • -3 - 3 열 (선 억제 그 두 파일 모두에 표시)

FILE1 고유 한 줄이 인쇄됩니다.