私に関連するデータを抽出するcsvファイルがあります。一方には参照番号があり、一方には文字G、A、T、Cの形の遺伝情報があります。
コンテンツCSV:
1,S188823,188823,,,,ACTCTCGA,,CTGTACCA,ID23,
1,S189843,189843,,,,ACCCTGGA,,CTTGTACA,ID23,
...
私に関連する情報は188823,,,,ACCCTGGA,,CTTGTACA
すべての行から来ます。このプロセスでは、重複エントリを削除する必要があります。最初の2行も切り取る必要があります。
これが私が現在やっていることです:
cat File.csv | cut -d "," -f 3,9,7 | uniq | sed -e '1d' -e '2d'
結果は次のとおりです。
188823,ACTCTCGA,CTGTACCA
189843,ACCCTGGA,CTTGTACA
...
しかし、今やるべきことは2つありましたが、私は失敗しました。フィールド3とフィールド2を交換する必要があります。
188823,CTGTACCA,ACTCTCGA
189843,CTTGTACA,ACCCTGGA
...
フィールド2から始めて、塩基は「逆相補的」でなければなりません。つまり、すべての A が T になり、すべての C が G になり、すべての G が C になり、すべての T が A になり、シーケンスの順序が逆であるという意味です。したがってにCTGTACCA
なりますTGGTACAG
。
最終結果は次のようになります。
188823,TGGTACAG,ACTCTCGA
188823,TGTACAAG,ACCCTGGA
これが理解できることを願って、私を助けることができることを願っています。リバースコンフィギュレーションのヘルプはここにあります。 オンラインRevCompジェネレータ
ベストアンサー1
GNUの使用awk
:
awk -F, '!seen[$3 FS $9 FS $7]++ {
cmd="echo \047" $9 "\047 | rev | tr ATCG TAGC";
if ((cmd |getline $9)>0){ print $3, $9, $7; };
close(cmd);
}' OFS=, infile
出力:
188823,TGGTACAG,ACTCTCGA
189843,TGTACAAG,ACCCTGGA
NR>2
コマンドに追加すると、awk 'NR>2{ ...; }'
入力の最初の2行をスキップするように機能します。
ここでは[getline
パイプから変数への変換] cmd="..." $9 "..."
(外部コマンドに関連する項目だけが二重引用符で囲まれています。)次に、パイプから呼び出してgetline
同じフィールドに結果を保存し、$9
結果getline
が成功すると出力に必須フィールドを印刷します。
最後に、閉鎖(ガイドライン)これ注文する我々は開いた。
!seen[$3 FS $9 FS $7]++
処理フィールド#3、#9、#7の重複行を無視するために使用されます。