У меня есть три текстовых файла данных:
год:
2014
2014
2014
месяц:
03
03
03
день:
08
09
10
Я использую эту функцию для объединения их в дату:
function pl {
sed -n "$1p" $2
}
for (( j=1; j <= 3; j++ ))
do
yr=$(pl $j year)
mnth=$(pl $j month)
dy=$(pl $j day)
date_format=$yr-$mnth-$dy
echo $date_format
done
Мой вывод, однако, похож:
2014 -03-08
2014 -03-09
2014 -03-10
Я должен удалить пространство между "2 014" и "-". Другие коды используют $date_format, таким образом, не должно быть никакого пространства между символами.
Вот быстрое решение избавления от пробела в Вашем $date_format
переменная:
date_format=${date_format//[[:space:]]/}
echo "$date_format"
Если Вы получаете ту продукцию, у Вас есть тянущееся пространство в Вашем year
файл. Это работает точно как ожидалось, если Вы не делаете:
$ printf "2013\n2013\n2013\n" > year; printf "03\n03\n03\n" "03" > month; printf "08\n09\n10\n" > day
$ for (( j=1; j <= 3; j++ )); do
yr=$(pl $j year)
mnth=$(pl $j month)
dy=$(pl $j day)
date_format=$yr-$mnth-$dy
echo $date_format
done
2013-03-08
2013-03-09
2013-03-10
И, если Вы добавляете тянущееся пространство:
$ printf "%s2013 \n2013 \n2013 \n" > year
$ for (( j=1; j <= 3; j++ )); do
> yr=$(pl $j year)
> mnth=$(pl $j month)
> dy=$(pl $j day)
> date_format=$yr-$mnth-$dy
> echo $date_format
> done
2013 -03-08
2013 -03-09
2013 -03-10
Так, самое простое решение состоит в том, чтобы удалить пространство из Вашего входного файла:
sed -i 's/ *$//' year
Примечание, однако, что Вы используете очень сложное решение очень простой проблемы:
$ paste -d"-" year month day | tr -d ' '
2013-03-08
2013-03-09
2013-03-10
Удалите все после года / месяц / день непосредственно в эти sed
команда;
В эти pl()
функция заменяют
sed -n "$1p" $2
с
sed -n "$1s/\([0-9]*\).*/\1/p" $2