Вы можете сделать трюк с опцией -E
:
grep -E '(^|pattern)' file
Вот простой вывод:
Привет, Миллер(http://johnkerl.org/miller/doc)и этот input.csv
GENE,REF,ALT
AKT,A,G
AKT,G,G
очень просто
mlr --csv cut -x -f REF input.csv
Вывод
GENE,ALT
AKT,G
AKT,G
С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
-F'\t'
использовать табуляцию в качестве разделителя полей @non_ref_cols = grep { $F[$_] ne "REF" } 0..$#F if $. == 1
для строки заголовка получить индекс всех полей, которые НЕ являютсяREF
print join "\t", @F[@non_ref_cols]
вывести все поля, используя массив индексов, который мы получили для строки заголовка, используя табуляцию в качестве разделителя полей С awk:
awk -F'\t' -v OFS='\t' '
NR == 1 {for (i=1; i<=NF; i++) if ($i == "REF") refCol = i}
refCol {for (i = refCol + 1; i <=NF; i++) $(i-1) = $i; NF--}
1
' file.csv
Первая строка определяет, какой столбец является столбцом REF. Переменная refCol будет деинициализирована, если такого столбца нет.
Вторая строка удаляет столбец, если он был найден.
Третья строка выводит запись.
Вы можете определить, какой столбец REF
соответствует grep
, а затем решить удалить его, например. с сокращением GNU и предполагая, что ваши заголовки представляют собой отдельные слова, а разделители - табуляции:
colnumber=$(head -n1 file.tsv | grep -o '[^\t]\+' | grep -nx 'REF' | cut -d: -f1)
[[ -n $colnumber ]] && cut --complement -f$colnumber file.tsv > file.tsv.new
Выход:
GENE ALT
AKT G
AKT G