我有一個文本文件我通過從各種服務器的crontabs bash腳本,看起來像這樣格式生成:如何在bash中將輸入文件格式化爲特殊格式?
0 SYS1 server1的
5 SYS2 server2的
2,3- SYS3
0 sys3 server3
7 sys4 server4
....
,我希望它得到格式化這樣的:
0 SYS1 server1的
5系統2服務器2
2 SYS3 server(服務器)
3 SYS3 server3
0 sys3 server3
7 SYS4服務器4
....
的問題我已經是我也可以隨時更改如果每個SYS /服務器以上兩個數字,有可能是還不止每個服務器有兩個crontab條目。
我學嘗試是這樣的:
rday_old=""
rsys_old=""
rser_old=""
[[ -e output ]] && rm output
while read -u5 -r -a line; do
rday=${line[0]}
rsys=${line[1]}
rser=${line[2]}
if [[ "$rsys_old" == "$rsys" ]]; then
echo "$rday_old $rsys_old $rser" >> output
else
echo "$rday $rsys $rser" >> output
fi
rday_old=$rday
rsys_old=$rsys
rser_old=$rser
done 5< input_file
問題IST顯然,它不會像預期那樣發揮作用。我不知道解決這個問題的最好方法是什麼。我的嘗試沒有考慮到需要拆分的日子,如果它的格式爲2,3或2,4,5到7天(以crontab格式)(這將是*符號)。此外,它可能會發生,我需要存儲多個rday_old,rsys_old和rser_old。
我希望我以一種可以理解的方式表達我的問題。 感謝您提前提供任何幫助。
編輯:
@anishsane的答案後,我定他的回答
cat input | awk '{sys=$2; ser=$3; split($1,a,","); for(i in a){print a[i]" " sys " " ser}}' > output
但現在輸出的結果是:
0 SYS1 server1的
5系統2 server2
2 SYS3
3 SYS3服務器3
0 SYS3服務器3
7 SYS4服務器4
....
所以我幾乎沒有。
更新了原來的問題 – 23rdMC