неизвестное пространство между цифрами после команды эха

У меня есть три текстовых файла данных:

год:

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, таким образом, не должно быть никакого пространства между символами.

1
задан 21 October 2015 в 17:14

3 ответа

Вот быстрое решение избавления от пробела в Вашем $date_format переменная:

date_format=${date_format//[[:space:]]/}
echo "$date_format"
1
ответ дан 7 December 2019 в 13:52

Если Вы получаете ту продукцию, у Вас есть тянущееся пространство в Вашем 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
1
ответ дан 7 December 2019 в 13:52

Удалите все после года / месяц / день непосредственно в эти sed команда;

В эти pl() функция заменяют

sed -n "$1p" $2

с

sed -n "$1s/\([0-9]*\).*/\1/p" $2
0
ответ дан 7 December 2019 в 13:52

Другие вопросы по тегам:

Похожие вопросы: