Saya memiliki file besar untuk diproses dan saya tidak bisa mendapatkan apa yang saya butuhkan.
Harap dicatat bahwa saya tidak tahu sebelumnya berapa kali ini terjadi dalam satu file (misalnya, bisa terjadi> 1000 kali per file ).
Di bawah ini adalah file input saya (dibatasi TAB), di mana $1 adalah nomor baris. Urutan angka yang terputus terjadi pada $3:
797 47 M797 1 365.0 0.05 0.05 A 0.825
798 47 M798 1 365.0 0.05 0.05 A 0.825
799 47 M799 1 365.0 0.70 0.70 A 0.404
800 47 M800 1 365.0 0.00 0.00 A 0.990
801 47 M802 1 365.0 0.29 0.29 A 0.591
802 47 M803 1 365.0 0.12 0.12 A 0.726
Inilah yang saya inginkan:
797 47 M797 1 365.0 0.05 0.05 A 0.825
798 47 M798 1 365.0 0.05 0.05 A 0.825
799 47 M799 1 365.0 0.70 0.70 A 0.404
800 47 M800 1 365.0 0.00 0.00 A 0.990
801
802 47 M802 1 365.0 0.29 0.29 A 0.591
803 47 M803 1 365.0 0.12 0.12 A 0.726
Ini adalah kode yang berhasil saya tulis sejauh ini (nama file adalah test.sh):
awk '
marker=substr($3,2,6)
{ if (FNR < marker) {printf "\n"}
}' ${1}
Ini adalah output yang saya dapatkan sejauh ini:
797 47 M797 1 365.0 0.05 0.05 A 0.825
798 47 M798 1 365.0 0.05 0.05 A 0.825
799 47 M799 1 365.0 0.70 0.70 A 0.404
800 47 M800 1 365.0 0.00 0.00 A 0.990
801 47 M802 1 365.0 0.29 0.29 A 0.591
802 47 M803 1 365.0 0.12 0.12 A 0.726
803 47 M804 1 365.0 0.08 0.08 A 0.777
Jika ada yang punya solusi yang lebih baik untuk ini, beri tahu saya.
Jawaban yang Diterima:
Anda ditandai sebagai awk
, semoga Python bermanfaat.
Kode:
# !/usr/bin/python
import sys
def print_fixed_sequence(filename, line_num=0):
with open(filename, 'rU') as f:
for line in (x.strip() for x in f):
_, f1, f2, data = line.split('\t', 3)
rec_num = int(f2[1:])
while line_num != rec_num:
print(line_num)
line_num += 1
print('\t'.join((str(line_num), f1, f2, data)))
line_num += 1
print_fixed_sequence(sys.argv[1], line_num=795)
Hasil:
795
796
797 47 M797 1 365.0 0.05 0.05 A 0.825
798 47 M798 1 365.0 0.05 0.05 A 0.825
799 47 M799 1 365.0 0.70 0.70 A 0.404
800 47 M800 1 365.0 0.00 0.00 A 0.990
801
802 47 M802 1 365.0 0.29 0.29 A 0.591
803 47 M803 1 365.0 0.12 0.12 A 0.726