Я только что проверил это, и в результате команда после &&
не была выполнена. Это потому, что &&
является оператором И bash; для успешного выполнения команды AND обе команды, к которым она присоединяется, должны быть успешными. Если первый терпит неудачу, все это терпит неудачу,так что оболочка достаточно умна, чтобы не беспокоить выполнение лишней команды now -.
Попробуйте это:
input ()
{
cat <<EOF
+--------------------------+-------------------------+-+
| col_name | type |
+--------------------------+-------------------------+-+
| Name | String |
| Date | Fri 29 13:17:2020 |
+--------------------------+-------------------------+-+
EOF
}
input |
tr -d '|+-' | # remove decoration
grep -v ^$ | # remove empty lines
while read first rest; do # read first token and rest of the line
printf '"%s","%s"\n' \
"$first" "$rest" # format as required
done
Источник выглядит как ответ клиенту dbase в консоли. Но конец строки и много пробелов отсутствуют, вероятно, потеряны при открытии текста unix с помощью Блокнота. С исходным форматом (непропорциональным шрифтом )исходник может сформировать красивую таблицу.
+--------------------------+-------------------------+-+
| col_name | type |
+--------------------------+-------------------------+-+
| Name | String |
| Date | Fri 29 13:17:2020 |
+--------------------------+-------------------------+-+
Просмотрите текстовый файл в шестнадцатеричном редакторе, чтобы увидеть, что он содержит на самом деле. Затем вы можете написать команду для преобразования его в запрошенную форму. (При таком формате нельзя было написать в виде комментария, что это такое на самом деле)
Следующая awk
программа должна выполнять эту работу при условии, что ни одно из значений поля не может содержать кавычки (результатом будет не -CSV, соответствующий требованиям):
awk -F'|' -v OFS="," '/^\+/{next} {for (i=2;i<NF;i++) {gsub(/^ *| *$/,"",$i); printf("\"%s\"%s",$i,i<(NF-1)?OFS:ORS)}}' input.txt
Это будет
|
как разделитель полей +
|
)строк, которые не начинаются с +
, и вывести остальные поля, пробелы -обрезаны и заключены в двойные кавычки, с ,
в качестве разделителя полей. Предполагается, что любые начальные и конечные пробелы внутри ячеек являются просто украшением, и что входной файл не содержит пустых строк.