저는 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