Cacciatore Δημοσ. 21 Απριλίου Δημοσ. 21 Απριλίου Καλημέρα. Έχω κάποια αρχεία txt όπου περιέχουν κάποιες πληροφορίες/ονοματολογίες σε κάθε γραμμή, με κενά σύμβολα αριθμούς κλπ. Πχ Line1 Ονοματολογία 645 (t3*5) f(x) = x2 − 1 Line2 Ονοματολογία 93 (f-1 =#R) Line3 Ονοματολογία 518 (sin0=0) κλπ κλπ κλπ Χρειάζομαι έναν τρόπο όπου να μετατρέψω κάθε γραμμή από αυτό το txt αρχείο, σε ξεχωριστά αρχεία, χωρίς απαραίτητα κάποια κατάληξη, ή έστω σε plain txt. Δηλαδή να δημιουργηθούν τα παρακάτω αρχεία Ονοματολογία 645 (t3*5) f(x) = x2 − 1.txt Ονοματολογία 93 (f-1 =#R).txt Ονοματολογία 518 (sin0=0).txt και ου τώ καθεξής Προσπαθώ με το cat | touch, είδα και όσο έψαξα με χρήση xargs αλλά δεν κατάφερα απολύτως τίποτα Οι περισσότερες πληροφορίες που είδα έχουν να κάνουν με scripts, εγώ θέλω απλώς να γίνει μέσα από το τέρμιναλ, να δει αυτήν την λίστα και να βγάλει στον ίδιο φάκελο ξεχωριστά αρχεία με τα ονόματα της λίστας.
LeBoheme Δημοσ. 21 Απριλίου Δημοσ. 21 Απριλίου Καλησπέρα. Πιστεύω πως τα κενά σε συνδυασμό με τη μεταβλητή IFS σου κάνουν τη ζημιά. H `touch` αναγνωρίζει ορίσματα διαχωρισμένα με κενά και μάλλον καταλήγεις με ονόματα αρχείων τις συμβολοσειρές που δεν περιέχουν κενά. Σε bash μπορείς να δοκιμάσεις: sed -r 's/^(.*)$/"\1.txt"/' <filename> | xargs touch 1
xaerialtwistx Δημοσ. 22 Απριλίου Δημοσ. 22 Απριλίου (επεξεργασμένο) Μπορείς να το κανεις με την εντολή awk: awk '{print > ("ονομα _νέου_αρχείου" NR)}' υπάρχον_αρχείο_με_σειρές_προς_διάβασμα για παράδειγμα αν το αρχείο σου λέγεται text_file.txt και έχει 3 σειρές που θες να πανε σε 3 διαφορετικά αρχεία τα οποία θα έχουν όνομα content_of_line και τον αριθμό της εκάστοτε σειράς, δίνεις: awk '{print > ("content_of_line" NR)}' text_file.txt και θα πάρεις σαν αποτέλεσμα 3 αρχεία με ονόματα content_of_line1, content_of_line2 και content_of_line3, το κάθε ένα με το περιεχόμενο που θες. αν θες να προσθέσεις κατάληξη ομοίως κάνεις: awk '{print > ("όνομα νέο αρχείου" NR ".τύπος κατάληξης")}' πχ awk '{print > ("content_of_line" NR ".txt")}' text_file.txt Επεξ/σία 22 Απριλίου από xaerialtwistx 1
Cacciatore Δημοσ. 22 Απριλίου Μέλος Δημοσ. 22 Απριλίου Σας ευχαριστώ πολύ και τους δυο για τις απάντησεις. Θα δοκιμάσω και τους δυο τρόπους και θα επανέλθω με τα αποτελέσματα.
coffeex Δημοσ. 22 Απριλίου Δημοσ. 22 Απριλίου Δοκίμασε και αυτό cat TEST.txt| while read i; do touch $i.txt; done 1
Cacciatore Δημοσ. 22 Απριλίου Μέλος Δημοσ. 22 Απριλίου Καλησπέρα, σας ευχαριστώ πολύ και τους τρεις σας για την πολύτιμη βοήθεια σας. Θα απαντήσω για τα αποτελέσματα και των τριών εντολών. 17 ώρες πριν, LeBoheme είπε Καλησπέρα. Πιστεύω πως τα κενά σε συνδυασμό με τη μεταβλητή IFS σου κάνουν τη ζημιά. H `touch` αναγνωρίζει ορίσματα διαχωρισμένα με κενά και μάλλον καταλήγεις με ονόματα αρχείων τις συμβολοσειρές που δεν περιέχουν κενά. Σε bash μπορείς να δοκιμάσεις: sed -r 's/^(.*)$/"\1.txt"/' <filename> | xargs touch Δούλεψε. Διάβασε το αρχείο και με το όνομα κάθε γραμμής δημιούργησε ένα αρχείο txt δίνοντας του αυτόματα το όνομα κάθε ξεχωριστής γραμμής. 10 ώρες πριν, xaerialtwistx είπε Μπορείς να το κανεις με την εντολή awk: awk '{print > ("ονομα _νέου_αρχείου" NR)}' υπάρχον_αρχείο_με_σειρές_προς_διάβασμα για παράδειγμα αν το αρχείο σου λέγεται text_file.txt και έχει 3 σειρές που θες να πανε σε 3 διαφορετικά αρχεία τα οποία θα έχουν όνομα content_of_line και τον αριθμό της εκάστοτε σειράς, δίνεις: awk '{print > ("content_of_line" NR)}' text_file.txt και θα πάρεις σαν αποτέλεσμα 3 αρχεία με ονόματα content_of_line1, content_of_line2 και content_of_line3, το κάθε ένα με το περιεχόμενο που θες. αν θες να προσθέσεις κατάληξη ομοίως κάνεις: awk '{print > ("όνομα νέο αρχείου" NR ".τύπος κατάληξης")}' πχ awk '{print > ("content_of_line" NR ".txt")}' text_file.txt Πολύ ενδιαφέρουσα εντολή, αλλά εμένα μου επέστρεψε αρχεία που είχαν όνομα "content_of_line". Δηλαδή δεν διάβασε μόνο του, τι υπάρχει σε κάθε γραμμή για να ονομάσει το εκάστοτε αρχείο. Για να σε κάνω να καταλάβεις, σε ένα αρχείο που λέγεται Χ0 και έχει διάφορους τύπους όπου χ=0 σε κάθε γραμμή, έδωσα την εντολή awk '{print > ("content_of_line" NR)}' X0.txt και μου επέστρεψε ως ονόματα αρχείων content_of_line87, content_of_line88, content_of_line89, κλπ κλπ, με περιεχόμενα την ονοματολογία της κάθε γραμμής ως περιεχόμενο του αρχείου Καταλαβαίνω την εξαιρετικά χρήσιμη λειτουργία αυτής της εντολής, έτσι όπως μου την παρέθεσες, ότι παίρνει την κάθε γραμμή από ένα αρχείο, και την μετατρέπει ως ξεχωριστό περιεχόμενο, και σίγουρα θα χρησιμοποιηθεί περαιτέρω. 3 ώρες πριν, coffeex είπε Δοκίμασε και αυτό cat TEST.txt| while read i; do touch $i.txt; done Δούλεψε και αυτή η εντολή Διάβασε το αρχείο που έδωσα ως input, και με το όνομα κάθε γραμμής του, δημιούργησε ένα αρχείο txt δίνοντας του αυτόματα το όνομα της κάθε ξεχωριστής γραμμής. Σας ευχαριστώ πολύ και τους τρεις σας @LeBoheme, @xaerialtwistx, @coffeex για την πολύτιμη βοήθεια που μου παρείχατε. Να είστε καλά.
xaerialtwistx Δημοσ. 22 Απριλίου Δημοσ. 22 Απριλίου 4 ώρες πριν, Cacciatore είπε Πολύ ενδιαφέρουσα εντολή, αλλά εμένα μου επέστρεψε αρχεία που είχαν όνομα "content_of_line". Δηλαδή δεν διάβασε μόνο του, τι υπάρχει σε κάθε γραμμή για να ονομάσει το εκάστοτε αρχείο. Για να σε κάνω να καταλάβεις, σε ένα αρχείο που λέγεται Χ0 και έχει διάφορους τύπους όπου χ=0 σε κάθε γραμμή, έδωσα την εντολή awk '{print > ("content_of_line" NR)}' X0.txt και μου επέστρεψε ως ονόματα αρχείων content_of_line87, content_of_line88, content_of_line89, κλπ κλπ, με περιεχόμενα την ονοματολογία της κάθε γραμμής ως περιεχόμενο του αρχείου Καταλαβαίνω την εξαιρετικά χρήσιμη λειτουργία αυτής της εντολής, έτσι όπως μου την παρέθεσες, ότι παίρνει την κάθε γραμμή από ένα αρχείο, και την μετατρέπει ως ξεχωριστό περιεχόμενο, και σίγουρα θα χρησιμοποιηθεί περαιτέρω. Ναι δεν καταλαβα καλά οτι ηθελες το περιεχόμενο στο όνομα του αρχείου. Αν και πήρες διαφορες λύσεις με xargs που δοκίμαζες μπορείς με: xargs -I {} touch {} < ονομα_αρχειου_με_ονοματολογίες 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα