Привет, я пытаюсь вывести файл CSV, и я продолжаю получать часть своей строки, написанную на новой строке.Неожиданная новая строка при написании в Unix Shell Script
Общий сценарий читается в CSV-файле, который имеет метку времени, преобразует его, а затем добавляет время Epoch к концу строки в качестве новой переменной и выводит файл.
#!/bin/bash
OLDIFS=$IFS
IFS=","
cat test.csv | while read Host AName Resource MName TimeStamp Integer_Value Epoch;
do
Epoch=$(date -d "$TimeStamp GMT" +%s)
if [ -z "$Epoch" ]
then
(echo "$Host, $AName, $Resource, $MName, $TimeStamp, $Integer_Value, Epoch,";) >> target.csv
else
(echo "$Host, $AName, $Resource, $MName, $TimeStamp, $Integer_Value, $Epoch,";) >> target.csv
fi
done
Я пытаюсь установить заголовок, то выписывать прилагаемые переменный, ожидать, и это происходит только на новом значении, она падает прилагаемые переменную в новую строку.
#Host, AName, Resource, MName, Actual Start Time, Integer Value
, Epoch,
ABCD89A, Admin, shop, Stall Count, 2014-01-06 09:00:00.0, 0
, 1388998800,
Вместо
#Host, AName, Resource, MName, Actual Start Time, Integer Value, Epoch,
ABCD89A, Admin, shop, Stall Count, 2014-01-06 09:00:00.0, 0, 1388998800,
Когда я двигаю порядок вокруг него не бывает. Извините, я знаю, что это, наверное, просто я новичок в сценариях Unix.
EDIT
Теперь я изменил код:
#!/bin/bash
OLDIFS=$IFS
IFS=","
while read Host AName Resource MName TimeStamp Integer_Value Epoch
do
Epoch=$(date -d "$TimeStamp GMT" +%s)
if [ -z "$Epoch" ]
then
echo "$Host, $AName, $Resource, $MName, $TimeStamp, $Integer_Value, Epoch,"
else
echo "$Host, $AName, $Resource, $MName, $TimeStamp, $Integer_Value, $Epoch,"
fi
done <test.csv> target.csv
И я все еще получаю те же проблемы.
также как дополнительный вопрос, если кто-нибудь знает, почему я получаю: команда не найдена дата: неверная дата `Фактическое время начала TimeStamp GMT 'при запуске части даты, но она дает правильную дату и запускает скрипты.
Попробуйте удалить все полуколоны и скобки вокруг инструкций «эхо». Затем удалите «cat test.csv» и добавьте «>» и добавьте «> target.csv» после «done». –
Привет, Марк, спасибо за ваш ответ, я пробовал, что это не имеет значения, все равно это происходит. – QuinsUK
Запустили ли вы скрипт с 'bash -x script'? Недействительные сообщения о сообщениях удивляют; 'bash -x' будет (должен) показывать, какой вызов команды' date' генерирует сообщение. Новая линия немного озадачивает. Я предлагаю попробовать 'IFS = $ ', \ n''. Если это работает, то объяснение состоит в том, что 'read' включает в себя новую строку во входной строке, но, исключая новую строку из IFS, вы запрещаете оболочке игнорировать новую строку. –