編集:ブロック引用テキストを追加しました。
acc.paired.txt
照明サンプル名()を含むタブ区切りのテキストファイル()がありますhead
。
SRR10598163_R1.fastq.gz SRR8916417_R2.fastq.gz
SRR10598049_R1.fastq.gz SRR10598163_R2.fastq.gz SRR8916418_R1.fastq.gz
SRR10598049_R2.fastq.gz SRR10598164_R1.fastq.gz SRR8916418_R2.fastq.gz
SRR10598050_R1.fastq.gz SRR10598164_R2.fastq.gz SRR8916419_R1.fastq.gz
SRR10598050_R2.fastq.gz SRR10598165_R1.fastq.gz SRR8916419_R2.fastq.gz
SRR10598051_R1.fastq.gz SRR10598165_R2.fastq.gz SRR8916420_R1.fastq.gz
SRR10598051_R2.fastq.gz SRR10598166_R1.fastq.gz SRR8916420_R2.fastq.gz
SRR10598052_R1.fastq.gz SRR10598166_R2.fastq.gz SRR8916421_R1.fastq.gz
SRR10598052_R2.fastq.gz SRR10598167_R1.fastq.gz SRR8916421_R2.fastq.gz
SRR10598053_R1.fastq.gz SRR10598167_R2.fastq.gz SRR8916422_R1.fastq.gz
SRR10598053_R2.fastq.gz SRR10598168_R1.fastq.gz SRR8916422_R2.fastq.gz
SRR10598054_R1.fastq.gz SRR10598168_R2.fastq.gz SRR8916423_R1.fastq.gz
私がしたい変更は2つあります。 1)重複したサンプル名を削除し、2)特定のサンプル名の後のすべての文字を削除します。私のターゲット出力はSRR###
数値(no _R#.fastq.qz
)のみを含み、重複する項目は含まないタブで区切られたテキストファイルです。ターゲット出力の例:
SRR10598163
SRR8916417
SRR10598049
SRR8916418
SRR10598164
SRR10598050
SRR8916419
SRR10598165
SRR10598051
SRR8916420
SRR10598166
SRR10598052
SRR8916421
SRR10598167
SRR10598053
SRR8916422
SRR10598054
SRR10598168
SRR8916423
sed
文字削除モードに切り替えます。
`sed 's| _R1.fastq.gz||g' acc.paired.txt > out.txt`
しかし、out.txt
変化はありません。
ティア。
答え1
使用grep
とsort
:
grep -oE '\bSR[^_]+' file | sort -u
SRR10598049
SRR10598050
SRR10598051
[...]
正規表現の一致は次のとおりです。
節 | 説明する |
---|---|
\b |
単語文字(\w)と単語以外の文字アンカーの間の境界アンカー |
SR |
「SR」 |
[^_]+ |
以下を除くすべての文字:_ (1回以上(最大の一致) |
答え2
GNU awk を使用して、との複数文字のプラスRS
と略語を表します。\s
\S
[[:space:]]
[^[:space:]]
$ awk -v RS='_\\S+\\s*' '!seen[$0]++' file
SRR10598163
SRR8916417
SRR10598049
SRR8916418
SRR10598164
SRR10598050
SRR8916419
SRR10598165
SRR10598051
SRR8916420
SRR10598166
SRR10598052
SRR8916421
SRR10598167
SRR10598053
SRR8916422
SRR10598168
SRR10598054
SRR8916423
答え3
牛に似た一種の栄養sedコマンドは次のとおりです。
sed 's/\s/\n/g;s/_R[0-9].fastq.gz//g' acc.paired.txt | sort |uniq > out.txt
また、これを行うことができますアッ:
awk '{gsub("_R[0-9].fastq.gz","\n", $0)gsub("\n ","\n",$0);gsub("\n$","",$0);print}' acc.paired.txt | sort | uniq > out.txt
2番目と3番目のgsub関数は、スペースと最後の改行文字を削除するために使用されます。
答え4
あなたはできます
- すべてのスペースを改行に変更
tr
- 一致するすべての
_R1.fastq.gz
コンテンツを削除sed
- 空行を削除
grep
- そして、出力をソートして重複項目を削除します
sort
。
% < acc.paired.txt tr ' ' '\n' | sed -e 's/_R.\.fastq\.gz//' | grep . | sort -u
SRR10598049
SRR10598050
SRR10598051
SRR10598052
[...]
注文を除いて、出力は質問に示されているものと同じです。
もちろん、正規表現では.
すべての文字が一致します\.
。このリテラルポイントgrep .
は少なくとも1つの文字を含む行のみを保持するため、連続しtr
た空白の空白行は失われます。これはまた、周りではなく、そこにR1
到達するためにのみ、仮定します。R9
R11