Saya mencoba untuk menghapus karakter pertama dan terakhir dari setiap baris dalam file teks dan menyimpan versi terpotong yang dihasilkan dalam file baru. Adakah yang punya ide tentang bagaimana melakukannya secara efisien menggunakan awk
atau program / perintah linux lainnya khusus untuk file besar?
input.txt
(s,2,4,5,6)
"s,1,5,5,2"
{z,0,4,5,3}
[y,2,4,5,5]
(y,4,4,5,7)
(r,20,4,5,7)
(e,9,4,5,2)
Output.txt yang diharapkan
s,2,4,5,6
s,1,5,5,2
z,0,4,5,3
y,2,4,5,5
y,4,4,5,79
r,20,4,5,7
e,9,4,5,2
text-processing
sed
awk
pacodelumberg
sumber
sumber
ssed
atau toolchest Heirloomsed
dapat mencapai kinerja yang lebih baik.sed
Sesuai pertanyaan Anda hapus kata terakhir dan pertama dari file input seperti di bawah ini:
sumber
s/.\(.*\).$/\1/
,. Mungkin lebih cepat karena tidak menggunakan referensi, dan pertanyaan itu menyebutkan "file besar".time yes | head -n 10000000 | COMMAND >/dev/null
. Saya mendapatkanrev input | cut -c2- | rev | cut -c2-
→ 0.14s,sed 's,.\(.*\).$,\1,'
→ 3.38s;awk '{print substr($0,2,length()-2);}'
→ 3,50s;sed 's/.$//; s/^.//'
→ 5.09s.sed 's/.\(.*\)./\1/'
tampaknya lebih cepat daripadased 's/^.\(.*\).$/\1/'
(GNU sed lagi). Selain itu, kinerjanya tergantung pada lokal (interpretasi karakter) dansed
implementasinya (dalam hal itu, sed dari heirloom toolchest jauh lebih cepat daripada sed GNU).Ada banyak kemungkinan, seperti biasa
Penjelasan
,
- pembatas sed, bisa berupa karakter lain juga, mengingat itu lolos di mana pun dibutuhkan..
Cocokkan satu karakter\(.*\)
- Kelompokkan bagian yang tersisa, dan ini disimpan untuk diambil lebih lanjut..
Cocokkan satu karakter lagi$
- Akhir baris\1
- Keluarkan teks yang cocok dengan grup di atasg
ganti secara global di telepon.sumber
g
? hanya akan ada satu pertandingan per baris.Anda juga dapat melakukannya dengan
awk
jika Anda mausumber
Ini harus bekerja juga. Itu juga "menerjemahkan" masing-masing karakter menjadi tidak ada (hapus).
The downside adalah bahwa itu akan menghapus mereka jika mereka bukan karakter pertama / terakhir juga. Itu juga akan melewatkan karakter akhir apa pun yang tidak Anda cantumkan di
()[...
.sumber