2017-05-23 8 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 

以下、このコードを実行しようとしている

ここに出力があります。それはの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 

任意の考えは、なぜ、私は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に置き換えました。