Csv

使用 CsvKit 截斷 CSV 列

  • July 15, 2022

如何使用 CSVKit 截斷列的長度?

定義如下所示:

  • 第一欄:無長度限制
  • 第 2 列:<不超過 2 個字元>

這應該正確處理轉義(引用)的列和新行。

例如:

First Header,Second Header
foo,
foo,b
foo,bar
foo,"bar"
foo,"""bar"
foo,"
bar"

應該成為

First Header,Second Header
foo,
foo,b
foo,ba
foo,ba
foo,"""b"
foo,"
b"

這是使用 csvsql 的解決方案:

csvsql -d ',' --query 'SELECT "First Header" as "First Header",substr("Second Header",1,2) as "Second Header" FROM data' data.txt
First Header,Second Header
foo,
foo,b
foo,ba
foo,ba
foo,"""b"
foo,"
b"

除非另有說明,否則我認為 CSVKit 無法直接實現。但是,我知道這可以用Miller完成:

mlr --csv put '${Second Header} = substr(${Second Header},0,1)' file.csv

輸出

First Header,Second Header
foo,
foo,
foo,ba
foo,ba
foo,"""b"
foo,"
b"

(如果您使用的是 Miller 版本 6 或更高版本,則有更好和首選的替代方案substr。我無法在此處對其進行測試,因此我不會將它們包括在內。)

引用自:https://unix.stackexchange.com/questions/709879