0

以下のタイプのデータを含むテキストファイルがあります。

Example:
10212012115655_113L_-247R_247LRdiff_0;
10212012115657_114L_-246R_246LRdiff_0;
10212012115659_115L_-245R_245LRdiff_0;
10212012113951_319L_-41R_41LRdiff_2;
10212012115701_116L_-244R_244LRdiff_0;
10212012115703_117L_-243R_243LRdiff_0;
10212012115705_118L_-242R_242LRdiff_0;
10212012113947_317L_-43R_43LRdiff_0;
10212012114707_178L_-182R_182LRdiff_3;
10212012115027_278L_-82R_82LRdiff_1;

持っているすべてのデータ行をコピーしたい

1) _2 _3 _1 at the end of it into another file along with
2) stripping out the semicolon at the end of it.

したがって、最後にファイル内のデータは次のようになります

Example:  
10212012113951_319L_-41R_41LRdiff_2
10212012114707_178L_-182R_182LRdiff_3
10212012115027_278L_-82R_82LRdiff_1

どうすればこれを行うことができますか?Linuxのubuntu10.0464ビットを使用しています

ありがとう

4

4 に答える 4

2

を使用する 1 つの方法を次に示しsedます。

sed -n 's/\(.*_[123]\);$/\1/p' file.txt > newfile.txt

を使用する 1 つの方法を次に示しgrepます。

grep -oP '.*_(1|2|3)(?=;$)' file.txt > newfile.txt

の内容newfile.txt:

10212012113951_319L_-41R_41LRdiff_2
10212012114707_178L_-182R_182LRdiff_3
10212012115027_278L_-82R_82LRdiff_1
于 2012-10-22T03:10:19.653 に答える
1

フォーマットが常に同じで、各行の最後にセミコロンしかない場合はgrep、行を見つけてから次のsedように置き換えることができ;ます。

grep -P "_(1|2|3);$" your_file | sed 's/\(.*\);$/\1/' > your_new_file

コマンドのは-Pgrep解析に Perl-regex インタープリターを使用するように指示します。または、egrep(利用可能な場合)を使用することもできます。

于 2012-10-22T03:08:58.853 に答える
1

興味がある場合は、 awk ソリューションを次に示します。

awk '/_[321];$/{gsub(/;/,"");print}' your_file

以下でテスト:

> awk '/_[321];$/{gsub(/;/,"");print}' temp
10212012113951_319L_-41R_41LRdiff_2
10212012114707_178L_-182R_182LRdiff_3
10212012115027_278L_-82R_82LRdiff_1
于 2012-10-22T07:29:54.917 に答える
0
tr -c ";" "\n" > newfile
grep '*_[123]$' newfile > newfile

これはうまくいくはずです。最初に、すべて;を変換して\n、結果を宛先ファイルに保存します。次に、grep を使用*_[123]して最後にのみ含まれる行を照合し、一致する結果をそのファイルに再度保存して、以前のすべてのデータを置き換えます。最後にマークするには、 を使用し$ました。

慣れていない場合に備えて、trgrepを使用した例をいくつか示します。

于 2012-10-22T03:21:45.373 に答える