GNU/Linux >> Znalost Linux >  >> Linux

Nahradit řádky odpovídající vzoru řádky z jiného souboru v pořadí?

Chci nahradit řádky odpovídající vzoru z jednoho souboru řádky v pořadí z jiného souboru, například za předpokladu:

soubor1.txt :

aaaaaa
bbbbbb
!! 1234
!! 4567
ccccc
ddddd
!! 1111

rádi nahrazujeme řádky začínající na !! s řádky tohoto souboru:

soubor2.txt :

first line
second line
third line

takže výsledek by měl být:

aaaaaa
bbbbbb
first line
second line
ccccc
ddddd
third line

Přijatá odpověď:

Snadno lze provést pomocí awk

awk '
    /^!!/{                    #for line stared with `!!`
        getline <"file2.txt"  #read 1 line from outer file into $0 
    }
    1                         #alias for `print $0`
    ' file1.txt

Jiná verze

awk '
    NR == FNR{         #for lines in first file
        S[NR] = $0     #put line in array `S` with row number as index 
        next           #starts script from the beginning
    }
    /^!!/{             #for line stared with `!!`
        $0=S[++count]  #replace line by corresponded array element
    }
    1                  #alias for `print $0`
    ' file2.txt file1.txt

Linux
  1. Otestovat, zda existují soubory odpovídající vzoru, aby bylo možné spustit skript?

  2. Nahradit řádek jiným obsahem pomocí Sed And Parallel pro velký soubor?

  3. Nahradit rozsah řádků rozsahem řádků (sed nebo jiné)?

  1. Efektivně odstranit prvních pár řádků z textového souboru?

  2. Ponechat pouze první řádek z každé sekvence po sobě jdoucích řádků, které odpovídají vzoru?

  3. Jak připojit více řádků k souboru?

  1. Duplicitní, s několika malými změnami, několika řádky v textovém souboru?

  2. Čtení řádků ze souboru s Bash:For vs. Zatímco?

  3. Linux - grep od určitých řádků až do konce souboru