Durchlaufen einer Liste von Tupeln oder Namen aus einer Textdatei

Durchlaufen einer Liste von Tupeln oder Namen aus einer Textdatei

Ich habe den folgenden Befehl in einem Linux-Skript.

#!/bin/bash

for i in "001 ARG1" "002 ARG2" "003 ARG3"
do
    set -- $i
    echo $1
    echo $2
done

001 und ARG1 sind im Wesentlichen Tupel,

Gibt es eine Möglichkeit, diese Tupel in eine Textdatei zu verschieben, die ich stattdessen in die For-Schleife laden kann? Bei vielen würde ich eine Textdatei wie diese speichern

ARG1
ARG2
ARG3

oder

001 ARG1
002 ARG2
003 ARG3

Und das Skript wäre

for i in textfile.txt
do
    set -- $i
    echo $1
    echo $2
done

und das gleiche Ergebnis erhalten?

gibt es auch eine Möglichkeit, es so zu machen, dass 001 002 automatisch gezählt wird? So wie man in Python Zähler = 0 und Zähler+=1 setzen und eine Variable zuweisen könnte.

Antwort1

Gegeben sind zwei durch Leerzeichen oder Tabulatoren getrennte Wörter in jeder Zeile einer Datei, wie in Ihrem zweiten Beispiel der Eingabedatei:

while read -r word1 word2; do
    echo "$word1"
    echo "$word2"
done <textfile.txt

Dadurch wird das erste Wort jeder Zeile in $word1und der Rest der Zeile in gelesen $word2.

Der Input hierfür readerfolgt durch die Eingabe des whileCompound-Kommandos, welches diesen über eine Umleitung aus der Datei bezieht.

Die -rOption verhindert , dass das Zeichen in der Eingabe auf eine spezielle Weise readinterpretiert wird.\

Mit einem einzelnen Wort pro Zeile und einem Zähler:

counter=0
while read -r word; do
    counter=$(( counter + 1 ))
    echo "$counter"
    echo "$word"
done <textfile.txt

Dadurch wird der Zähler bei jeder Iteration (für jede gelesene Zeile) um eins erhöht textfile.txt.

Um einen mit Nullen aufgefüllten dreistelligen Zähler zu erhalten, geben Sie den Zähler printfmit der folgenden Formatierungszeichenfolge aus %.3d\n:

printf '%.3d\n' "$counter"

... anstelle von echo "$counter".

Eine Beschreibung der %.3d\nBedeutung finden Sie in der Dokumentation der C-Bibliotheksfunktion printf( man 3 printf, das Shell-Äquivalent verwendet hauptsächlich dieselbe Formatzeichenfolge).

verwandte Informationen