Sed
使用 sed 擷取組
我有一個看起來像這樣的文件:
chr1 3143567 3143568 .3-2704 1.000000|ENSMUSG00000102693.2 chr1 3143599 3143600 .3-2705 1.000000|ENSMUSG00000102693.2 chr1 3143631 3143632 .3-2706 1.000000|ENSMUSG00000102693.2 chr1 3143663 3143664 .3-2707 1.000000|ENSMUSG00000102693.2 chr1 3143695 3143696 .3-2708 1.000000|ENSMUSG00000102693.2 chr1 3143727 3143728 .3-2709 1.000000|ENSMUSG00000102693.2
我正在編寫 2 個 sed 表達式來過濾
|
第一個之前的所有內容,並使用結果文件我丟棄之後的所有內容,.
如下所示:
sed -n -e 's/^.*|//p' original_file.txt > first_result.txt
sed -n -e 's/\..*//p' first_result.txt > final_result.txt
我怎樣才能將所有這些寫在一行中?
最終目標是擷取
ENSMUSG00000102693
您的命令將丟棄不包含
|
字元的行,以及滑鼠基因標識符沒有版本號的行。我不確定這是有意的,但這是在命令上sed -n
使用p
標誌的副作用。s
我會假設這是無意的。只需使用兩個表達式
sed
:sed -e 's/.*|//' -e 's/\..*//' file >newfile
使用
grep
具有非標準-o
選項的命令,並假設您只想從文件中提取所有 Ensembl 小鼠基因穩定 ID(並且該文件僅包含您要提取的穩定 ID),grep -o 'ENSMUSG[[:digit:]]*' file >newfile
您還可以使用兩個鍊式
cut
命令,每個命令都對數據進行類似的修改,就像sed
本答案前面的兩個替換一樣。使用靜態剪切可能比使用正則表達式更快,但我懷疑你會看到任何主要的速度差異,除非你的輸入數據很大。cut -d '|' -f 2 file | cut -d '.' -f 1 >newfile