while read -r 删除第二个“\”
while read -r deletes second "\"
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
我所做的只是尝试下面的代码
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 }') -l | grep "INFO" |awk '{print }'`
if [ "$active" -eq 0 ]
then
echo $valid >> /tmp/test_final.csv
else
full=`echo $valid | awk -F "," '{print }'`
incr=`echo $valid | awk -F "," '{print }'`
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
不知道为什么,我试过 IFS='
' 因为它将忽略 test.csv 中的白色 space 但结果是相同的。我很想知道为什么它在看到“\c”时删除并添加下一行,然后在遇到“\c”时再次删除。
有什么建议吗?
看来你的 echo $valid
是罪魁祸首。 echo
的某些版本解释反斜杠序列。特别是,\c
用作 "suppress newline" 转义符。
printf %s "$valid"
会更好
或者,如果您需要在 echo
通常添加的末尾换行:printf '%s\n%' "$valid"
不是while,aix,IFS的问题,是遇到了echo中的\c"suppress further output",我换成printf解决了问题
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
我所做的只是尝试下面的代码
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 }') -l | grep "INFO" |awk '{print }'`
if [ "$active" -eq 0 ]
then
echo $valid >> /tmp/test_final.csv
else
full=`echo $valid | awk -F "," '{print }'`
incr=`echo $valid | awk -F "," '{print }'`
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
不知道为什么,我试过 IFS=' ' 因为它将忽略 test.csv 中的白色 space 但结果是相同的。我很想知道为什么它在看到“\c”时删除并添加下一行,然后在遇到“\c”时再次删除。
有什么建议吗?
看来你的 echo $valid
是罪魁祸首。 echo
的某些版本解释反斜杠序列。特别是,\c
用作 "suppress newline" 转义符。
printf %s "$valid"
会更好
或者,如果您需要在 echo
通常添加的末尾换行:printf '%s\n%' "$valid"
不是while,aix,IFS的问题,是遇到了echo中的\c"suppress further output",我换成printf解决了问题