GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie analysiert man jede Zeile einer Textdatei als Argument für einen Befehl?

Ich möchte ein Skript schreiben, das eine .txt verwendet filename als Argument, liest die Datei Zeile für Zeile und übergibt jede Zeile an einen Befehl. Beispielsweise wird command --option "LINE 1" ausgeführt , dann command --option "LINE 2" usw. Die Ausgabe des Befehls wird in eine andere Datei geschrieben. Wie mache ich das? Ich weiß nicht, wo ich anfangen soll.

Akzeptierte Antwort:

Verwenden Sie while read Schleife:

: > another_file  ## Truncate file.

while IFS= read -r LINE; do
    command --option "$LINE" >> another_file
done < file

Eine andere Möglichkeit besteht darin, die Ausgabe blockweise umzuleiten:

while IFS= read -r LINE; do
    command --option "$LINE"
done < file > another_file

Zuletzt öffnen Sie die Datei:

exec 4> another_file

while IFS= read -r LINE; do
    command --option "$LINE" >&4
    echo xyz  ## Another optional command that sends output to stdout.
done < file

Wenn einer der Befehle die Eingabe liest, wäre es eine gute Idee, einen anderen fd für die Eingabe zu verwenden, damit die Befehle ihn nicht fressen (hier unter der Annahme von ksh , zsh oder bash für -u 3 , verwenden Sie <&3 statt portabel):

while IFS= read -ru 3 LINE; do
    ...
done 3< file

Um schließlich Argumente zu akzeptieren, können Sie Folgendes tun:

#!/bin/bash

FILE=$1
ANOTHER_FILE=$2

exec 4> "$ANOTHER_FILE"

while IFS= read -ru 3 LINE; do
    command --option "$LINE" >&4
done 3< "$FILE"

Welches könnte laufen als:

bash script.sh file another_file

Zusätzliche Idee. Mit bash , verwenden Sie readarray :

readarray -t LINES < "$FILE"

for LINE in "${LINES[@]}"; do
    ...
done

Hinweis:IFS= kann weggelassen werden, wenn es Ihnen nichts ausmacht, Zeilenwerte von führenden und nachgestellten Leerzeichen zu befreien.


Linux
  1. So fügen Sie Text am Anfang jeder Zeile in Vim ein

  2. Wie übergibt man ein Befehlszeilenargument an ein Shell-Skript?

  3. Wie füge ich in Bash nach jeder Zeile in einer Datei eine Zeichenfolge hinzu?

  4. So bearbeiten Sie eine Textdatei in meinem Terminal

  5. Wie ersetze ich eine Datei im JAR durch die Befehlszeile in Linux?

So speichern Sie die Linux-Befehlsausgabe in einem Bild oder einer Textdatei

So analysieren oder zeigen Sie XML-Code in der Linux-Befehlszeile an

So sperren Sie eine Textdatei in Linux mit dem Befehl flock

So drucken Sie doppelte Zeilen in einer Textdatei unter Linux

So senden Sie eine E-Mail mit Dateianhang von der Befehlszeile aus

So extrahieren Sie die Tar.xz-Datei in der Linux-Befehlszeile