sedまたはawkを使用して、いくつかの文字を除くすべての行の.txtファイルに文字列を追加する方法


8

次の名前のテキストファイルがありますxid.txt

xid: SC48028 id: artf398444
xid: indv1000 id: indv24519
xid: SC32173 id: artf398402
xid: SC21033 id: artf398372
xid: 1001 id: tracker4868
xid: wiki1000 id: wiki10709
xid: proj1234 id: proj12556

「SC48028」、「SC32173」などの前に「PT_」という文字列を追加する必要があります。文字列「SC ...」は、「AC ...」または「DL ..」の任意の組み合わせで開始できます。

必要な出力:

xid: PT_SC48028 id: artf398444
xid: indv1000 id: indv24519
xid: PT_SC32173 id: artf398402
xid: PT_SC21033 id: artf398372
xid: 1001 id: tracker4868
xid: wiki1000 id: wiki10709
xid: proj1234 id: proj12556

上記の出力が表示された場合、 'i'、 'p'、 'w'& 'numerical'で始まる文字列の前に 'PT_'を挿入しないでください。sedで挿入/追加を使用して、要件に合わせていくつかの基本的なコマンドを試しました。


2
あなたの質問はトピックに関するものであり、ここで歓迎しますが、新しいバイオインフォマティクスサイトに興味があるかもしれません。
terdon

回答:


13

AWK

awk '$2~/^[A-Z][A-Z]/{ $2="PT_"$2 }1' xid.txt

出力:

xid: PT_SC48028 id: artf398444
xid: indv1000 id: indv24519
xid: PT_SC32173 id: artf398402
xid: PT_SC21033 id: artf398372
xid: 1001 id: tracker4868
xid: wiki1000 id: wiki10709
xid: proj1234 id: proj12556

  • $2~/^[A-Z][A-Z]/ -2番目のフィールドが2つの大文字で始まる場合

またはsedアプローチ:

sed -i 's/^\(xid:[[:space:]]*\)\([A-Z]\{2\}[^[:space:]]*\)/\1PT_\2/' xid.txt

これはとてもスムーズで、すぐに答えてくれてありがとう。既存の入力ファイルに追加したい場合はどうすればよいですか?
Subrat Sahoo 2017年

awk '$2~/^[A-Z]{2}/{ $2="PT_"$2 }1' xid.txt > xid-tmp && mv xid-tmp xid.txtまたは、私の2番目のアプローチを使用する
RomanPerekhrest 2017年

1
@SubratSahooこの回答で問題が解決した場合は、少し時間を取って、左側のチェックマークをクリックして同意してください。これにより、質問に回答済みのマークが付けられ、Stack Exchangeサイトで感謝の気持ちが表現されます。
terdon

1
また、@ SubratSahoo(およびRoman)の新しいバージョンのGNU awk(通常はLinuxシステムにインストールされている-i inplaceもの)では、sedやperlのようなファイルを編集できます-i
terdon

@terdon、はい、私は知っています-i inplacemv移植性に合うようにOPのコマンドを使用した統合アプローチを提案しました)。用としてBioinformatics betaコミュニティ:私はちょうどそれに参加しました。Linux / Pythonプログラミング/処理に関連するタスクはありますか?あなたはどのように思いますか?
RomanPerekhrest 2017年

6

sedオプション

sed -i -e 's/[A-Z][A-Z]/PT_&/' file

どこ

  • -i その場で編集
  • -e 実行するコマンド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.