Ich habe eine CSV-Datei in einem Linux-Server, der mehrere Zeilen mit einer Varianz von Feldern hat. Ich möchte sicherstellen, dass alle Datensätze die maximale Anzahl von Spalten (leere Werte) als die Zeile mit der maximalen Anzahl von Spalten haben. Ich muss das in einer Bash-Schrift erreichen. Ich möchte versuchen, awk zu verwenden, wenn möglich, ich bin nur neu zu bash.Stellen Sie sicher, CSV-Datei hat die gleiche Anzahl von Spalten für jede Zeile in Bash
Antwort
awk
zur Rettung. Sie können alle in einem Skript tun, T. J. die Beispieleingabedatei mit
$ awk -F, -v OFS=, 'NR==FNR{if(max<NF)max=NF;next};
{NF=max}1' file{,}
1,2,3,4,5,
1,2,3,4,,
1,2,3,,,
1,2,3,4,5,6
Erläuterung: Dies ist ein Doppeldurchlauf-Algorithmus, in der ersten Runde die max und verwendet in der zweiten berechnet. NR==FNR
gilt nur für die erste Datei, berechnet das Maximum, beachten Sie, dass das Max nicht initialisiert werden muss, da der Standardwert Null ist und die Längen nicht negativ sind. next
überspringt den Rest des Skripts. In der zweiten Runde füllt die Einstellung NF=max
die Datensätze mit weniger Feldern. 1
wird als Kurzschrift für den Ausdruck (oder eine zutreffende Anweisung) basierend auf den awk
Standardwerten verwendet. Außerdem wird file{,}
zu file file
aufgelöst, um die gleiche Datei zweimal für den Double-Pass-Algorithmus zu verwenden.
Das gleiche kann mit Single-Pass-Arrays und END-Block geschrieben werden.
whereis T.J.'s Probe? –
Bravo - beste Antwort! Danke, dass du die Erklärung hinzugefügt hast. –
Arbeitete schön! Vielen Dank! Große Erklärung auch. Ich bin neu in bash, also ist es großartig, wenn jemand erklärt, was vor sich geht, besonders mit awk! –
- 1. jede Zeile von data.frame und geben Sie die Anzahl der Wiederholungen für jede Zeile
- 2. Stellen Sie sicher, dass fgetcsv() die gesamte Zeile liest
- 3. Excel, überprüfen Sie, ob eine Spalte die gleiche Anzahl von Zeichen für jede Zelle hat
- 4. Summe der similiar Spalten für jede Zeile
- 5. SQL Server: Spaltenname von max mehrerer Spalten für jede Zeile
- 6. Nehmen Sie Durchschnitt zwischen zwei Spalten für jede Zeile
- 7. Berechnen Mittelwerte von Spalten in einer Sequenz für jede Zeile
- 8. Summenzellen bestimmter Spalten für jede Zeile
- 9. Stellen Sie Korrektheit in Riak sicher?
- 10. Stellen Sie sicher, ascii Werte
- 11. Stellen Sie sicher, Variableninitialisierung C#
- 12. Bash - wie jede Zeile in Anführungszeichen setzen
- 13. Stellen Sie UIPopoverController für IPad auf die gleiche Bildschirmgröße ein
- 14. So stellen Sie sicher, dass eine Datei eine eindeutige Zeile in vb.net hat, wenn die Größe der Datei sehr groß ist
- 15. UITextView Grenze für jede Zeile
- 16. stellen Sie sicher, d3 Datenelement entspricht ID?
- 17. Stellen Sie sicher, dass jede Aufgabe für einen bestimmten Parameter nur einmal in Node.JS
- 18. Stellen Sie die gleiche Höhe für alle Bilder ein
- 19. So stellen Sie sicher, dass die Spalten in QTableView auf das Maximum geändert werden
- 20. Wie führe ich die gleiche Aggregation für jede Spalte durch, ohne die Spalten aufzulisten?
- 21. Filter jede Zeile von Linux Bash-Ausgabe von Regexp
- 22. Konvertieren von Spalten in Zeilen gegen jede Zeile
- 23. So finden Sie die Anzahl der numerischen Daten für jede Zeile in einer Datei
- 24. Stellen Sie sicher, dass die Protokollierung mit einer bestimmten Zeichenfolge
- 25. Liest eine vollständige Tabellenüberprüfung alle Spalten (für jede Zeile)?
- 26. SQL Get Anzahl aller Zeilen, die die gleiche ID haben
- 27. GNUPlot - Beliebige Anzahl von Spalten in gestapelter Zeile
- 28. Berechnen Sie den Preis für jede Zeile
- 29. Suche nach oberen N Spalten für jede Zeile im Datenrahmen
- 30. lesen Zeile für Zeile in Bash-Skript
Wie sind Ihre Spalten getrennt? 'awk '{NF = 5} 1' file.txt' teilt jede Zeile in Leerzeichen und druckt die ersten 5 Spalten. Und Sie können '-F 'verwenden, also setzen Sie Komma als Separator. – andlrc
Ja, sie sind durch Kommas getrennt. –