Shell脚本命令从CSV文件中删除列

时间:2019-02-25 13:06:35

标签: bash shell

我正在尝试从csv文件中删除一列(我从预处理中获取此列作为变量)。

我查看了提供的示例并尝试了以下

cut -d ',' -f 2 X.csv > Y.csv

上述命令无济于事-X.csv的第二列复制到Y.csv

我希望将第二列和定界符一起删除

例如:

name,place,animal
a,chicago,python
b,new york,squirrel

使用cut命令后,文件应该看起来像

name,animal
a,python
b,squirrel

4 个答案:

答案 0 :(得分:3)

您可能要使用csvkit中的csvcut

https://csvkit.readthedocs.io/en/1.0.3/scripts/csvcut.html

-C提供了您正在寻找的功能

   -C NOT_COLUMNS, --not-columns NOT_COLUMNS
                        A comma separated list of column indices, names or
                        ranges to be excluded, e.g. "1,id,3-5". Defaults to no
                        columns.

答案 1 :(得分:2)

选择要存储的存储卡,而不是选择要存储的存储卡!

cut -d ',' -f 1,3- X.csv > Y.csv

无论如何,如果您希望删除一列而不是保留其他列(相同的观点,不同的观点),则也可以使用补码标志:

cut -d ',' -f 2 --complement X.csv > Y.csv

答案 2 :(得分:1)

man cut

--complement
       complement the set of selected bytes, characters or fields

让我们尝试一下:

$ cut -d , -f 2 --complement file
name,animal
a,python
b,squirrel

答案 3 :(得分:0)

许多语言附带CSV解析模块。我喜欢红宝石的单线:

ruby -rcsv -e '
  CSV.foreach(ARGV.shift) do |row|
    row.delete_at 1   # "1" is the 2nd field due to 0-based array indexing.
    puts row.to_csv
  end
' file.csv

或者,如果您喜欢单线衬套

ruby -rcsv -e 'CSV.foreach(ARGV.shift) {|row| row.delete_at 1; puts row.to_csv}' file.csv