Преобразование приведенной ниже таблицы txt в формат таблицы csv

Я только что проверил это, и в результате команда после &&не была выполнена. Это потому, что &&является оператором И bash; для успешного выполнения команды AND обе команды, к которым она присоединяется, должны быть успешными. Если первый терпит неудачу, все это терпит неудачу,так что оболочка достаточно умна, чтобы не беспокоить выполнение лишней команды now -.

-3
01.10.2020, 22:51
3 ответа

Попробуйте это:

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
0
18.03.2021, 23:00

Источник выглядит как ответ клиенту dbase в консоли. Но конец строки и много пробелов отсутствуют, вероятно, потеряны при открытии текста unix с помощью Блокнота. С исходным форматом (непропорциональным шрифтом )исходник может сформировать красивую таблицу.

+--------------------------+-------------------------+-+ 
| col_name                 | type                    |
+--------------------------+-------------------------+-+ 
| Name                     | String                  | 
| Date                     | Fri 29 13:17:2020       | 
+--------------------------+-------------------------+-+

Просмотрите текстовый файл в шестнадцатеричном редакторе, чтобы увидеть, что он содержит на самом деле. Затем вы можете написать команду для преобразования его в запрошенную форму. (При таком формате нельзя было написать в виде комментария, что это такое на самом деле)

0
18.03.2021, 23:00

Следующая 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

Это будет

  • трактовать |как разделитель полей
  • игнорировать все строки, начинающиеся с+
  • игнорировать первое и последнее «поле» (, которые пусты, поскольку они являются «содержимым» перед первой и последней|)строк, которые не начинаются с +, и вывести остальные поля, пробелы -обрезаны и заключены в двойные кавычки, с ,в качестве разделителя полей.

Предполагается, что любые начальные и конечные пробелы внутри ячеек являются просто украшением, и что входной файл не содержит пустых строк.

0
18.03.2021, 23:00

Теги

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