SED 删除 csv 列(如果存在)

use*_*974 4 sed csv delete

如果此列存在,我需要从我的表格 CSV 文件中删除一列。

我的 CSV 文件:

GENE REF ALT
AKT  A   G
AKT  G   G
Run Code Online (Sandbox Code Playgroud)

所需的输出:如果列 REF 存在删除此列

GENE  ALT
AKT    G
AKT    G
Run Code Online (Sandbox Code Playgroud)

我试图这样做:

sed 's/\tREF.[^\t]*//' filename.csv
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

Sun*_*eep 5

perl

$ perl -F'\t' -lane '@non_ref_cols = grep { $F[$_] ne "REF" } 0..$#F if $. == 1;
                     print join "\t", @F[@non_ref_cols]' ip.txt
GENE    ALT
AKT     G
AKT     G
Run Code Online (Sandbox Code Playgroud)
  • -F'\t' 使用制表符作为字段分隔符
  • @non_ref_cols = grep { $F[$_] ne "REF" } 0..$#F if $. == 1 对于标题行,获取所有非字段的索引 REF
  • print join "\t", @F[@non_ref_cols] 使用我们为标题行获得的索引数组打印所有字段,使用制表符作为字段分隔符


abo*_*uso 5

你好,米勒(http://johnkerl.org/miller/doc)和这个 input.csv

GENE,REF,ALT
AKT,A,G
AKT,G,G
Run Code Online (Sandbox Code Playgroud)

很容易

mlr --csv cut -x -f REF input.csv
Run Code Online (Sandbox Code Playgroud)

输出是

GENE,ALT
AKT,G
AKT,G
Run Code Online (Sandbox Code Playgroud)

  • 这个米勒工具很好用:-) (2认同)