我有一个csv文件,有数百列和80行。我需要从文件中删除前13列。
我试过使用:
cut-d,-f1-13--补码input.csv>output.csv
但问题是第一列中包含引号的文本包括逗号和剪切不能处理这种格式。
输入示例:
海德拉,海德尔,海德尔,海德尔,海德尔,海德尔,海德尔,海德尔,海德尔,海德尔
A,“B,B”,C,“D,D,D”,E,F,G,H
A,“B,B”,C,“D,D,D”,E,F,G,H
A,“B,B”,C,“D,D,D”,E,F,G,H
期望输出:
海德尔,海德尔,海德尔,海德尔
E、F、G、H
E、F、G、H
E、F、G、H
在这个例子中,我在类似的条件下处理较少的列。理想情况下,该解决方案应该可以扩展到任意数量的列和行(在我的例子中是13列和80行)。
我试过用awk寻找解决方案,但通常包括打印除要删除的列以外的所有列,由于列的数量太多,这不是一个实用的解决方案。
最佳答案
考虑到您所设定的特定条件,这样的操作将有效:
grep -oE '(("[^"]+"|[^,]+),?){5}$' input.csv > output.csv
其中,
5
中的{5}
替换为您希望保留的列数。因此,给定N
列(其中前13列将被省略),该值将为N - 13
。注意:如果任何被引用的列数据本身包含引号(例如
"some \"data\" in quotes"
),正则表达式将无法正确匹配,尽管可以调整模式以适应这种情况(但它变得相当复杂)。关于linux - 删除列csv文件,其中一些包含带引号的文本(包括逗号),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53069937/