Cách thêm một chuỗi vào tệp .txt trong tất cả các hàng trừ vài ký tự sử dụng sed hoặc awk


8

Tôi có một tệp văn bản có tên 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

Tôi cần thêm một chuỗi 'PT_' trước 'SC48028', 'SC32173' ... v.v. Chuỗi 'SC ...' có thể bắt đầu bằng bất kỳ kết hợp nào có thể là 'AC ...' hoặc 'DL ..'

Yêu cầu đầu ra:

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

Nếu bạn thấy đầu ra ở trên, chúng ta không nên chèn 'PT_' trước các chuỗi bắt đầu bằng 'i', 'p', 'w' & 'số'. Tôi đã thử một vài lệnh cơ bản cho yêu cầu của mình bằng cách sử dụng insert / append trong sed.


2
Câu hỏi của bạn là về chủ đề và được chào đón ở đây, nhưng bạn có thể quan tâm đến trang web Tin sinh học mới của chúng tôi .
terdon

Câu trả lời:


13

Với awk :

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

Đầu ra:

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]/ - nếu trường thứ 2 bắt đầu bằng 2 chữ cái viết hoa

Hoặc phương pháp sed :

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

Điều này thật trơn tru, câu trả lời ngay lập tức cảm ơn rất nhiều. Nếu tôi muốn nối vào tập tin đầu vào hiện tại thì phải làm sao?
Subrat Sahoo

awk '$2~/^[A-Z]{2}/{ $2="PT_"$2 }1' xid.txt > xid-tmp && mv xid-tmp xid.txthoặc sử dụng phương pháp thứ hai của tôi
RomanPerekhrest

1
@SubratSahoo Nếu câu trả lời này giải quyết được vấn đề của bạn, vui lòng dành chút thời gian và chấp nhận nó bằng cách nhấp vào dấu kiểm bên trái. Điều đó sẽ đánh dấu câu hỏi đã được trả lời và là cách cảm ơn được thể hiện trên các trang web Stack Exchange.
terdon

1
Ngoài ra, @SubratSahoo (và Roman) các phiên bản GNU mới hơn (phiên bản awkbạn thường cài đặt trên các hệ thống Linux) -i inplacecho phép bạn chỉnh sửa một tệp tại chỗ, như sed và perl -i.
terdon

@terdon, vâng, tôi biết về -i inplace(Tôi đã đề xuất một cách tiếp cận thống nhất với mvlệnh cho OP để phù hợp với tính di động). Đối với Bioinformatics betacộng đồng: Tôi mới tham gia. Có thể có các nhiệm vụ liên quan đến lập trình / xử lý Linux / Python không? Bạn nghĩ như thế nào?
RomanPerekhrest

6

tùy chọn sed

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

Ở đâu

  • -i chỉnh sửa tại chỗ
  • -e lệnh thực thi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.