将下面的txt表格转换为csv表格格式

将下面的txt表格转换为csv表格格式

我在 unix 中有一个表,格式如下,并隐藏为输出。

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

输出:

"col_name","type"
"Name","String"
"Date","Fri 29 13:17:2020"

任何帮助,将不胜感激。

答案1

尝试这个:

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

答案2

源代码看起来像是控制台中对 dbase 客户端的响应。但是行尾和大量空格丢失了,可能是用记事本打开 unix 文本时丢失的。使用原始格式(不成比例的字体),源可以形成一个漂亮的表格。

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

在十六进制编辑器中查看文本文件,看看它的真正内容是什么。您可以编写一个命令将其转换为请求的形式。 (按照格式,不能写成注释,这到底是什么)

答案3

以下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

这会

  • 视为|字段分隔符
  • 忽略以以下内容开头的任何行+
  • |忽略那些不以 开头的行的第一个和最后一个“字段”(它们是空的,因为它们是第一个之前和最后一个之后的“内容” ) +,并打印剩余的字段,删除空格并用双引号括起来引号,带有,字段分隔符。

假设单元格内的任何前导和尾随空格纯粹是装饰,并且输入文件不包含空行。

相关内容