テーブルCSVファイルがある場合は、この列を削除する必要があります。
私のCSVファイル:
GENE REF ALT
AKT A G
AKT G G
希望の出力:REF列がある場合は削除します。
GENE ALT
AKT G
AKT G
私はこれを試みます:
sed 's/\tREF.[^\t]*//' filename.csv
しかし、うまくいきません。
答え1
こんにちはミラー(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
答え2
そして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]
ヘッダー行に対して取得したインデックス配列を使用し、タブをフィールド区切り文字として使用してすべてのフィールドを印刷します。
答え3
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変数は初期化されません。
列が見つかったら、2番目の行からその列を削除します。
3行目はレコードを印刷します。
答え4
どの列がREF
あるかを確認してgrep
から削除することを決定できます。たとえば、GNU cut を使用し、タイトルが単一の単語で区切り文字がタブであるとします。
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