bash - erstellen - raspberry pi datei öffnen




So lesen Sie eine Datei von Zeile x bis zum Ende einer Datei in Bash (5)

Dafür gibt es viele Lösungen. Einer meiner Favoriten ist:

(head -2 > /dev/null; whatever_you_want_to_do) < file.txt

Sie können auch tail , um die gewünschten Zeilen zu überspringen:

tail -n +2 file.txt | whatever_you_want_to_do

Ich würde gerne wissen, wie ich jede Zeile einer csv Datei von der zweiten Zeile bis zum Dateiende in einem Bash-Skript lesen kann.

Ich kann eine Datei in Bash lesen:

while read line
 do   
   echo -e "$line\n"
done < file.csv

Aber ich möchte die Datei von der zweiten Zeile bis zum Ende der Datei lesen. Wie kann ich das erreichen?


Das wird funktionieren

i=1
while read line
 do   
   test $i -eq 1 && ((i=i+1)) && continue
   echo -e "$line\n"
done < file.csv

Ich würde nur eine Variable bekommen.

#!/bin/bash

i=0
while read line
do
    if [ $i != 0 ]; then
      echo -e $line
    fi
    i=$i+1
done < "file.csv"

UPDATE Above sucht in jeder Zeile der csv-Datei nach der $i -Variable. Wenn Sie also eine sehr große CSV-Datei mit Millionen Zeilen haben, wird dies erhebliche Mengen an CPU-Zyklen kosten, was für Mutter Natur nicht gut ist .

Im Anschluss an einen Liner kann die erste Zeile der CSV-Datei mithilfe von sed gelöscht und die verbleibende Datei dann in while Schleife ausgegeben werden.

sed 1d file.csv | while read d; do echo $d; done

Je nachdem, was Sie mit Ihren Zeilen machen möchten: Wenn Sie jede ausgewählte Zeile in einem Array speichern möchten, ist die beste Map die beste Wahl:

numberoflinestoskip=1
mapfile -s $numberoflinestoskip -t linesarray < file

speichert jede Zeile der Datei ab Zeile 2 im Array- linesarray .

help mapfile für weitere Informationen.

Wenn Sie nicht jede Zeile in einem Array speichern möchten, gibt es andere sehr gute Antworten.

Wie F. Hauri in einem Kommentar vorschlägt, gilt dies nur, wenn Sie die gesamte Datei im Speicher ablegen müssen.

Ansonsten sind Sie am besten:

{
    read; # Just a scratch read to get rid (pun!) of the first line
    while read line; do
        echo "$line"
    done
} < file.csv

Hinweis: Es ist keine Subshell beteiligt / erforderlich.


tail -n +2 file.csv

Aus der Manpage :

-n, --lines=N
     output the last N lines, instead of the last 10
...

If the first character of N (the number of bytes or lines)  is  a  '+',
print  beginning with the Nth item from the start of each file, other-
wise, print the last N items in the file.

In englischer Sprache bedeutet dies:

tail -n 100 die letzten 100 Zeilen aus

tail -n +100 druckt alle Zeilen ab Zeile 100





bash