Kami akan menghasilkan file csv dengan nilai di bawah ini
yp1234,577,1,3
yp5678,577,3,5
yp9012,132,8,9
Saya perlu mengekstrak data dan membuat file berdasarkan kolom kedua. Jika 577 maka seluruh baris harus diekstraksi dan ditempatkan dalam file terpisah. Maksud saya, saya memerlukan file yang memiliki baris dengan kolom kedua sebagai 577 saja dan file lain dengan kolom kedua sebagai 132 saja
Saya mencoba menggunakan IF tetapi tidak berhasil
Jawaban:
Gunakan
awk
:Ini akan membuat dua file
577.csv
dan132.csv
dalam direktori Anda saat ini.Perintah di atas mengasumsikan bahwa Anda hanya dapat memiliki
132
atau577
sebagai bidang kedua. Ini akan membuat satu nama file untuk masing-masing nilai yang ditemukan di bidang kedua dari keseluruhanfile.csv
.Jika ada nilai lain selain dari dua yang Anda minati, dan Anda ingin mengabaikan garis itu, lakukan ini sebagai gantinya:
sumber
awk
implementasi buggy yang tidak bisa digunakanprint > $2 ".cvs"
. Pada orang-orang, Anda harus menghitung pertama nama file, kemudian lakukanprint
:fname = $2 ".cvs"; print > fname
.Saya suka
awk
solusi terdon , tetapi demi kelengkapan, berikut ini saran hanya menggunakanbash
Ini akan menghasilkan file
577.csv
dan132.csv
dalam direktori saat ini.sumber
Untuk mengekstrak semua 577 ke stdout
- sunting 1 Dikoreksi, berdasarkan komentar @ terdon di bawah untuk menghindari kecocokan salah ketika setidaknya 3 koma sesuai dengan 577.
Tapi saya pikir
awk
solusinya lebih komprehensif.sumber
foo577bar
atauyp9012,132,8,577
..*
juga dapat mencocokkan koma sehingga Anda tidak tahu bidang mana yang cocok. Bisa jadi yang kedua, bisa juga yang ke-45. Keluhan kedua saya salah, Anda benar bahwa koma melindungi dari pencocokanfoo577bar
.Menggunakan
csvkit
:The
-c 2
merekcvsgrep
menganggap kolom kedua, dan dengan-m 577
kita meminta untuk mencocokkan string577
di kolom tersebut.Berikut ini akan ditulis untuk
output.csv
:Untuk mencocokkan sejumlah string dan menulis output ke file untuk setiap string:
Ini akan membuat dua file
output-132.csv
danoutput-577.csv
.sumber