有一个包含以下内容的文件:
1111,2222,3333,4444
aaaa,bbbb,cccc,dddd
Run Code Online (Sandbox Code Playgroud)
我寻求获得与原始文件相同但缺少第 n 列的文件,例如,对于 n = 2(或者可能是 3)
1111,2222,4444
aaaa,bbbb,dddd
Run Code Online (Sandbox Code Playgroud)
或者,对于 n = 0(或者可能是 1)
2222,3333,4444
bbbb,cccc,dddd
Run Code Online (Sandbox Code Playgroud)
一个真正的文件可能有数千兆字节长,有数万列。
在这种情况下,我怀疑命令行魔术师可以提供一个优雅的解决方案...... :-)
在我实际的实际情况中,我需要删除 2 个第一列,这可以通过在序列中删除第一列两次来完成,但我认为概括一下会更有趣。
Sco*_*ung 49
我相信这是特定于从 GNU coreutils 中删除的:
$ cut --complement -f 3 -d, inputfile
1111,2222,4444
aaaa,bbbb,dddd
Run Code Online (Sandbox Code Playgroud)
通常你通过 -f 指定你想要的字段,但是通过添加 --complement 你自然地颠倒了含义。从“人切”:
--complement
complement the set of selected bytes, characters or fields
Run Code Online (Sandbox Code Playgroud)
一个警告:如果任何列包含逗号,它将抛出 cut off,因为 cut 不像电子表格那样是 CSV 解析器。许多解析器对如何处理 CSV 中的转义逗号有不同的想法。对于简单的 CSV 案例,在命令行上, cut 仍然是要走的路。
Gil*_*il' 13
如果数据只是由逗号分隔的列组成:
cut -d , -f 1-2,4-
Run Code Online (Sandbox Code Playgroud)
您也可以使用 awk,但它有点尴尬,因为虽然清除字段很容易,但删除分隔符需要一些工作。如果您没有空字段,那还不错:
awk -F , 'BEGIN {OFS=FS} {$3=""; sub(",,", ","); print}'
Run Code Online (Sandbox Code Playgroud)
如果您有实际的 CSV,如果正确引用逗号可以出现在字段中,则您需要一个真正的 CSV 库。