Προς το περιεχόμενο

Terminal - Create files from filelists


Προτεινόμενες αναρτήσεις

Δημοσ.

Καλημέρα. 

Έχω κάποια αρχεία 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, εγώ θέλω απλώς να γίνει μέσα από το τέρμιναλ, να δει αυτήν την λίστα και να βγάλει στον ίδιο φάκελο ξεχωριστά αρχεία με τα ονόματα της λίστας. 

 

Δημοσ.

Καλησπέρα. Πιστεύω πως τα κενά σε συνδυασμό με τη μεταβλητή IFS σου κάνουν τη ζημιά. H `touch` αναγνωρίζει ορίσματα διαχωρισμένα με κενά και μάλλον καταλήγεις με ονόματα αρχείων τις συμβολοσειρές που δεν περιέχουν κενά.

Σε bash μπορείς να δοκιμάσεις:

sed -r 's/^(.*)$/"\1.txt"/' <filename> | xargs touch

 

  • Like 1
Δημοσ. (επεξεργασμένο)

Μπορείς να το κανεις με την εντολή 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

Επεξ/σία από xaerialtwistx
  • Like 1
Δημοσ.

Σας ευχαριστώ πολύ και τους δυο για τις απάντησεις. 
 

Θα δοκιμάσω και τους δυο τρόπους και θα επανέλθω με τα αποτελέσματα. 

Δημοσ.

Καλησπέρα, σας ευχαριστώ πολύ και τους τρεις σας για την πολύτιμη βοήθεια σας. 

Θα απαντήσω για τα αποτελέσματα και των τριών εντολών. 

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 για την πολύτιμη βοήθεια που μου παρείχατε. 

Να είστε καλά.

Δημοσ.
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 {} < ονομα_αρχειου_με_ονοματολογίες

 

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...