2017-05-23 11 views
0
Here is my test file. 

ckencogtapzp01.corp.kencell.co.ke,KE13-CKENCOGTAPZP01-APP-SDP-DAILY,D:\websites ;D:\consoleapps ;D:\Errorlogs ;D:\Apache-Tomcat-7.0.19 ;C:\Inetpub\history ;C:\windows\system32\msmq ;C:\Inetpub\logs\logfiles ; ,05/17/2017,144.793,05/23/2017,0.116425 
ckencogtapzp01.corp.kencell.co.ke,KE13-CKENCOGTAPZP01-APP-SDP-MONTHLY,D:\consoleapps ;D:\websites ;C:\Inetpub\history ;C:\windows\system32\msmq ;C:\Inetpub\logs\logfiles ;D:\Errorlogs ;D:\Apache-Tomcat-7.0.19 ;C:\Inetpub\history ;C:\windows\system32\msmq ;C:\Inetpub\logs\logfiles ; ,05/21/2017,145.171,No_Backup,0 
ckencogtapzp01.corp.kencell.co.ke,KE13-CKENCOGTAPZP01-WIN-OS-MONTHLY,C:\ ;System State:\ ; ,05/16/2017,31.6048,No_Backup,0 
ckencogtapzp01.corp.kencell.co.ke,KE15-GENERAL-ALL-WIN-OS-MONTHLY,C:\ ;System State:\ ;Shadow Copy Components:\ ; ,05/20/2017,33.1401,No_Backup,0 

그리고 삭제 읽을 단순히 내가이 두 번째 "\"를 삭제하는 몇 가지 이유를 들어동안은 -r은 ""두 번째

echo "Client,Policy,Selection,Full_Backup_Date,Full_Size(GB),Incr_Backup_Date,Incr_Size(GB)" > /tmp/testfinal.csv 
      while read -r valid 
      do 
          active=`sudo /usr/openv/netbackup/bin/admincmd/bppllist $(echo $valid | awk -F "," '{print $2}') -l | grep "INFO" |awk '{print $12}'` 

          if [ "$active" -eq 0 ] 
          then 
              echo $valid >> /tmp/test_final.csv 
          else 
              full=`echo $valid | awk -F "," '{print $4}'` 
              incr=`echo $valid | awk -F "," '{print $6}'` 
              if [ "$full" != "No_Backup" ] && [ "$incr" != "No_Backup" ] 
              then 
                  echo $valid >> /tmp/testfinal.csv 
              fi 
          fi 
      done</tmp/test.csv 

아래에이 코드를 시도하고있는 중이 야하고 다음 줄을 추가

다음은 출력입니다.

ckencogtapzp01.corp.kencell.co.ke,KE13-CKENCOGTAPZP01-APP-SDP-DAILY,D:\websites ;D:ckencogtapzp01.corp.kencell.co.ke,KE13-CKENCOGTAPZP01-APP-SDP-MONTHLY,D:ckencogtapzp01.corp.kencell.co.ke,KE13-CKENCOGTAPZP01-WIN-OS-MONTHLY,C:\ ;System State:\ ; ,05/16/2017,31.6048,No_Backup,0 
ckencogtapzp01.corp.kencell.co.ke,KE15-GENERAL-ALL-WIN-OS-MONTHLY,C:\ ;System State:\ ;Shadow Copy Components:\ ; ,05/20/2017,33.1401,No_Backup,0 

이 test.csv의 공백을 무시하지만 결과는 동일로 내가 IFS = ' '를 시도 왜, 어떤 생각. 나는 "\ c"를보고 다음 줄을 추가 한 다음 "\ c"를 만났을 때 왜 그것을 삭제하는지에 대한 발끝으로 넘어 가고 있습니다.

제안 사항은 무엇입니까?

+0

while, aix 또는 IFS 때문에 발생하지는 않았다. 에코의"출력을 더 억제한다 "는 \ c를 발견했기 때문에 printf 문제를 해결했다. – Sid

답변

1

귀하의 echo $valid이 탓이라고합니다. echo의 일부 버전은 백 슬래시 시퀀스를 해석합니다. 특히, \c은 "줄 바꿈 억제"이스케이프로 사용됩니다.

printf %s "$valid"이 좋을 것입니다.

또는, 마지막에 개행을 필요로하는 경우 echo 일반적으로 추가합니다 : printf '%s\n%' "$valid" 그것은 때문에 동안, AIX 또는 IFS의 아니었다

+0

printf "$ valid \ n"이 printf % s "$ valid"와 동등한 것입니다. – Sid

+1

'$ valid'에'%'가 포함되어 있지 않습니다 –

+0

예,'echo'는 표준화되지 않았습니다. 아니); 'echo'의 플랫폼 독립적 인 형식은'printf'입니다. –

0

, 그것은 에코에 \ C를 발생하기 때문에 그것의 "더 억제 output "으로 바꾼다. 문제를 해결 한 printf로 바꾼다.