Katakanlah saya memiliki string berikut:
something1: +12.0 (some unnecessary trailing data (this must go))
something2: +15.5 (some more unnecessary trailing data)
something4: +9.0 (some other unnecessary data)
something1: +13.5 (blah blah blah)
Bagaimana cara mengubahnya menjadi sederhana
+12.0,+15.5,+9.0,+13.5
dalam pesta?
listOfStuff mkString ", "
, atau Haskell'sintercalate ", " listOfString
Jawaban:
Anda dapat menggunakan
awk
dansed
:Atau jika Anda ingin menggunakan pipa:
Untuk memecahnya:
awk
sangat bagus dalam menangani data yang dipecah menjadi beberapa bidang-vORS=,
setel "pemisah rekaman keluaran" ke,
, yang Anda inginkan{ print $2 }
memberitahuawk
untuk mencetak bidang kedua untuk setiap catatan (baris)file.txt
adalah nama file Andased
hanya menghilangkan trailing,
dan mengubahnya menjadi baris baru (jika Anda tidak menginginkan baris baru, Anda bisa melakukannyas/,$//
)sumber
awk -v ORS=| '{ print $1 }' DCMC.rtf | sed 's/,$/\n/'
saya mendapatkan kesalahan{print $1}
sebaliknya saya hanya mendapatkan koma dalam keluaranBersih dan sederhana:
sumber
cat thing | awk -F',' '{ print "'\''" $7 "'\' '" }' | paste -s -d ','
,'
sebagai pembatas?dos2unix
) jika ada CRLF dalam string tersebut.sumber
sumber
function | awk...
dalam contoh anda?awk satu kapal
sumber
Ini harus bekerja juga
sumber
Ini mungkin berhasil untuk Anda:
atau
atau
Untuk setiap baris dalam file; potong bidang pertama dan spasi setelahnya, potong sisa baris setelah bidang kedua dan tambahkan ke ruang tunggu. Hapus semua baris kecuali yang terakhir tempat kita menukar ke ruang tunggu dan setelah menghapus baris baru yang diperkenalkan di awal, ubah semua baris baru menjadi
,
.NB Bisa ditulis:
sumber
Anda dapat menggunakan
grep
:yang menemukan string dimulai dengan
+
, diikuti dengan string apa pun\S\+
, lalu mengubah karakter baris baru menjadi koma. Ini seharusnya cukup cepat untuk file besar.sumber
Coba kode mudah ini:
sumber
coba ini:
hal baiknya adalah bagian yang mudah dari menghapus karakter "\ n" baris baru!
EDIT: cara hebat lain untuk menggabungkan garis menjadi satu baris dengan sed adalah ini:
|sed ':a;N;$!ba;s/\n/ /g'
dapatkan dari sini .sumber
Solusi yang ditulis dalam Bash murni:
Hasil: + 12.0, + 15.5, + 9.0, + 13.5
sumber
Jangan melihat solusi sederhana ini dengan awk
sumber
Dengan perl:
sumber
Anda juga dapat melakukannya dengan dua panggilan sed:
Panggilan sed pertama menghapus data yang tidak menarik, dan yang kedua menggabungkan semua baris.
sumber
Anda juga dapat mencetak seperti ini:
Just awk: menggunakan printf
sumber
Solusi Perl lainnya, mirip dengan awk Dan Fego:
-a
memberi tahu perl untuk membagi baris input menjadi larik @F, yang diindeks mulai dari 0.sumber
Bagian tersulit mungkin adalah memilih "kolom" kedua karena saya tidak tahu cara mudah untuk memperlakukan banyak spasi sebagai satu. Selebihnya mudah saja. Gunakan substitusi bash.
sumber