GNU/Linux >> Znalost Linux >  >> Linux

Jak analyzovat každý řádek textového souboru jako argument příkazu?

Chci napsat skript, který přebírá .txt název_souboru jako argument, přečte soubor řádek po řádku a předá každý řádek příkazu. Například spustí command --option "LINE 1" a poté command --option "LINE 2" , atd. Výstup příkazu je zapsán do jiného souboru. Jak to mám udělat? Nevím, kde začít.

Přijatá odpověď:

Použijte while read smyčka:

: > another_file  ## Truncate file.

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

Dalším je přesměrování výstupu po bloku:

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

Poslední je otevřít soubor:

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

Pokud jeden z příkazů čte vstup, bylo by dobré použít pro vstup jiný fd, aby jej příkazy nesežraly (zde za předpokladu ksh , zsh nebo bash pro -u 3 , použijte <&3 místo toho přenosně):

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

Nakonec můžete přijmout argumenty:

#!/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"

Který by mohl běžet jako:

bash script.sh file another_file

Nápad navíc. S bash , použijte readarray :

readarray -t LINES < "$FILE"

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

Poznámka:IFS= lze vynechat, pokud vám nevadí, že hodnoty řádků budou oříznuty o mezery na začátku a na konci.


Linux
  1. Jak posunout řádek v textovém souboru nahoru nebo dolů o jeden řádek?

  2. Jak v Bash přidám řetězec za každý řádek v souboru?

  3. Jak upravit textový soubor v mém terminálu

  1. Jak extrahovat soubor tar.gz v Linuxu pomocí příkazového řádku

  2. Jak nahradit soubor v jar příkazovým řádkem v linuxu?

  3. Jak skrýt heslo předané jako argument příkazového řádku?

  1. Jak změnit oprávnění a vlastníky pomocí příkazového řádku

  2. Jak přidat čísla řádků do textových souborů v systému Linux

  3. Jak vložit text na začátek každého řádku ve Vimu