PHP Syntax
Πίνακας περιεχομένων:
- Ανάγνωση μιας γραμμής αρχείου με τη σύνταξη γραμμής
- Ανάγνωση παραδειγμάτων γραμμής αρχείου ανά γραμμή
- Εναλλακτικές μέθοδοι ανάγνωσης αρχείων
- Χρησιμοποιώντας μια αντικατάσταση διαδικασίας
- Χρησιμοποιώντας μια συμβολοσειρά Here
- Χρησιμοποιώντας τον περιγραφέα αρχείων
- συμπέρασμα
Όταν γράφετε σενάρια Bash, μερικές φορές θα βρεθείτε σε καταστάσεις όπου πρέπει να διαβάσετε μια γραμμή αρχείων ανά γραμμή. Για παράδειγμα, μπορεί να έχετε ένα αρχείο κειμένου που περιέχει δεδομένα που πρέπει να επεξεργαστούν από το σενάριο.
Σε αυτό το σεμινάριο, θα συζητήσουμε πώς να διαβάσετε μια γραμμή αρχείων ανά γραμμή στο Bash.
Ανάγνωση μιας γραμμής αρχείου με τη σύνταξη γραμμής
Η πιο γενική σύνταξη για την ανάγνωση ενός αρχείου γραμμής με γραμμή έχει ως εξής:
while IFS= read -r line do echo "$line" done < input_file
ή την ισοδύναμη έκδοση μιας γραμμής:
while IFS= read -r line; do echo $line; done < input_file
Πώς λειτουργεί;
Το αρχείο εισόδου (
input_file
) είναι το όνομα του αρχείου που θέλετε να ανοίξετε για ανάγνωση από την εντολή
read
. Η εντολή
read
διαβάζει τη γραμμή αρχείου ανά γραμμή, αντιστοιχίζοντας κάθε γραμμή στη μεταβλητή
line
. Μόλις επεξεργαστούν όλες οι γραμμές, ο βρόχος while θα τερματιστεί. Ο εσωτερικός διαχωριστής πεδίων (
IFS
) έχει οριστεί ως η μηδενική συμβολοσειρά για να διατηρήσει το κενό και το τελικό διάστημα, το οποίο είναι η προεπιλεγμένη συμπεριφορά της εντολής
read
.
Ανάγνωση παραδειγμάτων γραμμής αρχείου ανά γραμμή
Ας ρίξουμε μια ματιά στο παρακάτω παράδειγμα. Ας υποθέσουμε ότι έχουμε ένα αρχείο που ονομάζεται
distros.txt
περιέχει μια λίστα με μερικές από τις πιο δημοφιλείς διανομές Linux και τους διαχειριστές πακέτων τους χωρισμένους με κόμμα (
,
):
Ubuntu, apt Debian, apt CentOS, yum Arch Linux, pacman Fedora, dnf
Για να διαβάσετε τη γραμμή αρχείων ανά γραμμή, θα εκτελέσετε τον ακόλουθο κώδικα στο τερματικό σας:
while IFS= read -r line do echo "$line" done < distros.txt
Ο κώδικας θα διαβάσει το αρχείο ανά γραμμή, θα αντιστοιχίσει κάθε γραμμή σε μια μεταβλητή και θα αντηχεί την μεταβλητή. Βασικά, θα δείτε την ίδια έξοδο σαν να εμφανίζατε το περιεχόμενο του αρχείου χρησιμοποιώντας την εντολή cat.
Τι γίνεται αν θέλετε να εκτυπώσετε μόνο τις διανομές που χρησιμοποιούν apt; Ένας τρόπος θα ήταν να χρησιμοποιήσετε τη εντολή if και να ελέγξετε αν η γραμμή περιέχει το apt substring:
while IFS= read -r line do if]; then echo "$line" fi done < distros.txt
Ubuntu, apt Debian, apt
Κατά την ανάγνωση της γραμμής αρχείου κατά γραμμή, μπορείτε επίσης να περάσετε περισσότερες από μία μεταβλητές στην εντολή ανάγνωσης που θα διαιρέσει τη γραμμή σε πεδία που βασίζονται στο
IFS
. Το πρώτο πεδίο αντιστοιχεί στην πρώτη μεταβλητή, στη δεύτερη στη δεύτερη μεταβλητή κ.ο.κ. Αν υπάρχουν περισσότερα πεδία από τις μεταβλητές, τα πεδία που απομένουν έχουν εκχωρηθεί στην τελευταία μεταβλητή.
Στο ακόλουθο παράδειγμα, ρυθμίζουμε το IFS σε ένα κόμμα (
,
) και διαβιβάζουμε δύο μεταβλητές
distro
και
pm
στην εντολή ανάγνωσης. Τα πάντα από την αρχή της γραμμής μέχρι το πρώτο κόμμα θα ανατεθούν στην πρώτη μεταβλητή (
distro
) και η υπόλοιπη γραμμή θα εκχωρηθεί στη δεύτερη μεταβλητή (
pm
):
while IFS=, read -r distro pm do echo "$pm" is the package manager for "$distro" done < distros.txt
apt is the package manager for Ubuntu apt is the package manager for Debian yum is the package manager for CentOS pacman is the package manager for Arch Linux dnf is the package manager for Fedora
Εναλλακτικές μέθοδοι ανάγνωσης αρχείων
Χρησιμοποιώντας μια αντικατάσταση διαδικασίας
Η υποκατάσταση της διαδικασίας σάς επιτρέπει να μεταβιβάσετε την έξοδο από την εντολή ως όνομα αρχείου:
while IFS= read -r line do echo "$line" done < <(cat input_file)
Χρησιμοποιώντας μια συμβολοσειρά Here
Here String είναι μια παραλλαγή του εγγράφου Here. Η συμβολοσειρά
(cat input_file)
θα διατηρήσει τις νέες γραμμές:
while IFS= read -r line do echo "$line" done <<< $(cat input_file)
Χρησιμοποιώντας τον περιγραφέα αρχείων
Μπορείτε επίσης να δώσετε την είσοδο στον βρόχο χρησιμοποιώντας έναν περιγραφέα αρχείου:
while IFS= read -r -u9 line do echo "$line" done 9< input_file
Όταν εργάζεστε με περιγραφείς αρχείων χρησιμοποιήστε έναν αριθμό μεταξύ 4 και 9 για να αποφύγετε τη σύγκρουση με τους περιγραφείς εσωτερικών αρχείων κελύφους.
συμπέρασμα
Στο Bash, μπορούμε να διαβάσουμε ένα αρχείο γραμμής με γραμμή, παρέχοντας το όνομα αρχείου ως είσοδο σε ένα βρόχο ανάγνωσης.
bash terminalΗ Voype, η οποία ανταγωνίζεται την υπηρεσία Skype VOIP του eBay, προσφέρει δωρεάν κλήσεις PC-to-PC μεταξύ των χρηστών του Windows Live Messenger. Οι κλήσεις προς κινητά τηλέφωνα στις Η.Π.Α., είτε σταθερές είτε κινητές, κοστίζουν US $ .014 ανά λεπτό, ενώ και οι κλήσεις σταθερού και κινητού τηλεφώνου στον Καναδά κοστίζουν $ 0.055 ανά λεπτό. Οι κλήσεις προς σταθερές γραμμές στο Μεξικό κοστίζουν 0,104 δολάρια ανά λεπτό, ενώ οι κλήσεις προς κινητά κοστίζουν 0,277 δολάρια ανά λεπτό.
Μια λίστα με άλλες χώρες και τα ποσοστά κλήσεων διατίθενται στην τοποθεσία Web υπηρεσίας Voype, όπου οι άνθρωποι μπορούν επίσης να εγγραφούν.
Ωστόσο, τα κέρδη της εταιρείας μειώθηκαν εν μέρει με χρέωση αναδιάρθρωσης 0,10 δολ. ΗΠΑ ανά μετοχή. Το καθαρό εισόδημα ανήλθε σε 288 εκατομμύρια δολάρια ή 0,14 δολάρια ανά μετοχή, μια απότομη πτώση από το προηγούμενο έτος, όταν η EMC ανακοίνωσε καθαρό εισόδημα 526 εκατομμυρίων δολαρίων ή 0,24 δολάρια ανά μετοχή. Ο EMC, χωρίς να υπολογίζει το τέλος αναδιάρθρωσης, κέρδισε 0,24 δολάρια ανά μετοχή το τρίμηνο, ελαφρώς χτυπώντας την εκτιμώμενη συναίνεση των 0,23 δολαρίων ανά μετοχή μεταξύ των αναλυτών
Τα τριμηνιαία έσοδα έπληξαν ρεκόρ 4,02 δισεκατομμυρίων δολαρίων, συμπεριλαμβανομένων των VMware και όλων των άλλων επιχειρήσεων EMC. Αυτό ξεπέρασε τις εκτιμήσεις των αναλυτών για 3,99 δισεκατομμύρια δολάρια. Η VMware παρουσίασε τη μεγαλύτερη αύξηση των εσόδων από 412 εκατομμύρια δολάρια σε 514 εκατομμύρια δολάρια και κέρδισε επίσης τις βασικές υπηρεσίες αποθήκευσης της EMC, με τα έσοδά της να ανέρχονται σε 3,14 δισεκατομμύρια δολάρια από 3,03 δισεκατομμύρια δολάρια το προηγούμενο έτος. back up]
Μια δοκιμή USB 3.0 και εγκατάσταση ανάπτυξης από την Texas Instruments. Το SuperSpeed USB (όπως ονομάζεται USB 3.0) υποστηρίζει μέγιστο ρυθμό δεδομένων 4,8 gigabits ανά δευτερόλεπτο, σε σύγκριση με τα 480 megabit ανά δευτερόλεπτο για Hi-Speed USB (USB 2.0). Αυτό ισοδυναμεί με ένα θεωρητικό μέγιστο των 600 megabyte ανά δευτερόλεπτο - είναι πιο γρήγορο από ό, τι οι περισσότεροι σκληροί δίσκοι και έρχεται εγκαίρως για ένα κύμα νεώτερων και ταχύτερων μονάδων SSD. Για να σας δώσω μια ιδέα για το
Το USB 3.0 επιτυγχάνει αυτές τις ταχύτητες με μια νέα μορφή καλωδίου και καλωδίου, αλλά όλα είναι συμβατά προς τα πίσω USB 2.0 και USB 1.1. Συνδέστε την παλιά συσκευή σας και θα συνεχίσει να λειτουργεί (με την παλαιότερη ταχύτητα). Συνδέστε μια συσκευή USB 3.0 σε θύρα USB 2.0 και θα τρέχει με πιο αργή ταχύτητα







