我需要转换充满这样行的文件:
# 2007 4 29 10 1 17.98 blah other stuff
成这样格式化的行
2007.04.29.10.01.17
原始行是用空格分隔的,当一个位数字出现(例如 4)时,它会被列为“4”。当我转换它时,我需要能够将其更改为“04”。因此,有分隔文件的空格,以及作为前导零占位符的空格。
我需要编写一个 shell 脚本来进行转换。我尝试使用 cut 命令,因为每个字符都位于相同的位置,因此第 7 个字符始终是定界空格,而第 8 个字符始终是十位数字,或者应该是前导零的空格。但是我很快发现它将两个空格视为一个,这完全忽略了计数(因为有时我有'4',有时我会有'14'。
所以:我需要一种方法来读取和转换这个文件,要么使用 cut,要么使用其他方法(awk?),这将允许我这样做。一种修改我当前代码的方法(如下)或另一种效果更好的方法将不胜感激。
仅供参考,我目前的代码如下:
while read LINE
do
#IF line starts with '#', then
if [[ $LINE == "#"* ]]; then
#123456789012345678901
# 2008 12 26 11 26 20.36
# 2007 5 10 1 8 10.52
#GET 4 digit year
LINEyear=$(echo $LINE | cut -c3-6)
#GET 2 digit month
if [ $(echo $LINE | cut -c8-8) == " " ]; then
LINEmonth=0$(echo $LINE | cut -c8-9)
else
LINEmonth=$(echo $LINE | cut -c8-9)
fi
#GET 2 digit day
if [ $(echo $LINE | cut -c11-11) == " " ]; then
LINEday=0$(echo $LINE | cut -c11-12)
else
LINEday=$(echo $LINE | cut -c11-12)
fi
#GET hour, min, sec, (Removed to save space)
LINEnew=$LINEyear.$LINEmonth.$LINEday.$LINEhour.$LINEmin.$LINEsec
echo $LINEnew
fi
done