首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CsvKit截断CSV列

使用CsvKit截断CSV列
EN

Unix & Linux用户
提问于 2022-07-14 18:10:28
回答 2查看 349关注 0票数 6

如何使用CSVKit截断列的长度?

定义如下:

  • 第1栏:无长度限制
  • 列2:<不超过2 characters>

这应该正确地处理转义(引用)列和新行。

例如:

代码语言:javascript
复制
First Header,Second Header
foo,
foo,b
foo,bar
foo,"bar"
foo,"""bar"
foo,"
bar"

应该变成

代码语言:javascript
复制
First Header,Second Header
foo,
foo,b
foo,ba
foo,ba
foo,"""b"
foo,"
b"
EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2022-07-14 19:51:59

这是一个使用csvsql的解决方案:

代码语言:javascript
复制
csvsql -d ',' --query 'SELECT "First Header" as "First Header",substr("Second Header",1,2) as "Second Header" FROM data' data.txt
代码语言:javascript
复制
First Header,Second Header
foo,
foo,b
foo,ba
foo,ba
foo,"""b"
foo,"
b"
票数 3
EN

Unix & Linux用户

发布于 2022-07-14 19:46:57

类似于R_31415's回答,但除了要修改或记住字段的顺序(在这方面也与罗伊玛的回答类似)之外,无需命名任何其他字段:

代码语言:javascript
复制
csvsql --query 'UPDATE stdin SET "Second Header" = substr("Second Header",1,2); SELECT * FROM stdin' <file

一种稍微灵活一些的方法,允许我们在任何支持JSON的工具中插槽,对数据执行所需的转换:

  1. 使用csvkit中的csvjson创建CSV数据的JSON数组。
  2. 使用jq读取JSON数据,并截断两个字符的Second Header值。
  3. 使用csvkit中的in2csv读取JSON并创建CSV。
代码语言:javascript
复制
csvjson file | jq 'map(."Second Header" |= .[:2])' | in2csv -f json

给定问题中的CSV数据,csvjson的输出相当于

代码语言:javascript
复制
[
  {
    "First Header": "foo",
    "Second Header": null
  },
  {
    "First Header": "foo",
    "Second Header": "b"
  },
  {
    "First Header": "foo",
    "Second Header": "bar"
  },
  {
    "First Header": "foo",
    "Second Header": "bar"
  },
  {
    "First Header": "foo",
    "Second Header": "\"bar"
  },
  {
    "First Header": "foo",
    "Second Header": "\nbar"
  }
]

然后,jq的输出将是

代码语言:javascript
复制
[
  {
    "First Header": "foo",
    "Second Header": null
  },
  {
    "First Header": "foo",
    "Second Header": "b"
  },
  {
    "First Header": "foo",
    "Second Header": "ba"
  },
  {
    "First Header": "foo",
    "Second Header": "ba"
  },
  {
    "First Header": "foo",
    "Second Header": "\"b"
  },
  {
    "First Header": "foo",
    "Second Header": "\nb"
  }
]

最后的产出:

代码语言:javascript
复制
First Header,Second Header
foo,
foo,b
foo,ba
foo,ba
foo,"""b"
foo,"
b"
票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/709879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档