일치하는 두 단어 사이의 텍스트를 읽고 비교하여 다른 파일에 씁니다.

일치하는 두 단어 사이의 텍스트를 읽고 비교하여 다른 파일에 씁니다.

저는 Unix 쉘 스크립트를 작성 중이며 출력을 다른 파일에 작성해야 합니다.

Shop.log다음 과 같은 로그 파일이 있습니다 .

Place=hyd
Location=Abids
Shop=Bigbazar
Place=Mumbai
Location=Worli
Shop=ShoppersStop
Place=Hyd
Location=Madhapur
Place=Mumbai
Location=Thane
Shop=Adidas
Place=hyd
Location=Abids
Place=Mumbai
Shop=ShoppersStop

위 파일에서 3개의 매개변수가 모두 사용 가능한지 확인해야 하며 그렇지 않은 경우 해당 매개변수에 "N/A" 값을 할당하고 다른 매개변수를 작성해야 합니다 final.txt.

bash-4.1$ pr -ats, /home/user/Shop.log --columns 3 > final.txt

그러나 누락된 행으로 인해 잘못된 결과가 나타납니다.

답변1

이 문제에 대한 입력 파일을 쉽게 수정할 수 있는 명령이 없다고 생각합니다.

모든 특수 사례를 테스트하지는 않았습니다. sed이 명령은 입력의 마지막 줄에 "Place" 매개변수가 포함된 경우에 도움이 됩니다.

$ sed -i -E '$ s|^(Place.*)|\1\nShop=N/A|' /home/user/Shop.log

그런 다음 perl누락된 매개변수를 사용하여 "N/A" 값을 추가하고 출력을pr

$ perl -e '@file = `cat abc.txt` ; @s = ("Place", "Location", "Shop");
> for($j=0;$j<=$#file;) {if($file[$j] !~ /^$s[$i]/){print "$s[$i]=N/A\n"}
> else {print $file[$j]; $j++} $i=($i+1)%3;}
> ' | pr -ats, --columns 3 > final.txt

$ cat final.txt
Place=hyd,Location=Abids,Shop=Bigbazar
Place=Mumbai,Location=Worli,Shop=ShoppersStop
Place=Hyd,Location=Madhapur,Shop=N/A
Place=Mumbai,Location=Thane,Shop=Adidas
Place=hyd,Location=Abids,Shop=N/A
Place=Mumbai,Location=N/A,Shop=ShoppersStop

paste -d, - - -이용도 가능하니 참고하세요pr -ats, --columns 3

관련 정보