Předpokládejme, že mám 2 soubory, ABC.txt
&PQR.txt
s údaji uvedenými níže jako příklad:
ABC.txt:
ABC DEF
PQR.txt:
PQR XYZ
Chci grep
sloupec 1 z obou souborů a zapište do třetího textového souboru. Jak to lze provést?
Můj očekávaný výstup je (output.txt):
ABC PQR
Přijatá odpověď:
Zde je několik způsobů:
-
Pomocí
paste
acut
:$ paste -d ' ' <(cut -d' ' -f 1 ABC.txt ) <(cut -d' ' -f 1 PQR.txt ) > output.txt ABC PQR
Pokud váš systém nepodporuje substituci procesů, použijte místo toho toto:
$ cut -d' ' -f 1 ABC.txt > /tmp/aa; cut -d' ' -f 1 PQR.txt > /tmp/bb; paste -d ' ' /tmp/aa /tmp/bb
-
Pomocí
awk
(díky @Costas):awk 'FNR==NR{a[FNR]=$1; next}{print a[FNR],$1}' ABC.txt PQR.txt > output.txt
Speciální proměnná
FNR
je číslo řádku aktuálního vstupního souboru aNR
je číslo řádku vstupu obecně, bez ohledu na soubor, ze kterého pochází. Tyto dva jsou stejné pouze při čtení prvního vstupního souboru. První pole prvního souboru se tedy uloží doa
pole (a[FNR]=$1
), jehož klíče jsou čísla řádků a jejichž hodnoty jsou 1. pole. Poté, když je dosaženo druhého souboru, vytiskneme hodnotu odpovídající jeho číslu řádku (a[NR]
) a 1. pole aktuálního řádku.