Jak utworzyć nowy plik łączący selektywne kolumny z dwóch osobnych plików za pomocą awk? Bez bałaganu zamówienia elementów OBIE pliki.
Przykład: plik 3 może zawierać kolumnę 1, 2, 3 z pliku 1 i kolumnę 4 z pliku 2.
File 1
A 23 8 T
A 63 9 9
B 45 3 J
File 2
A 0
A 6
B 5
File 3
A 23 8 0
A 63 9 6
B 45 3 5
text-processing
awk
columns
gołębica
źródło
źródło
pr -m -t -s\ File1.txt File2.txt | gawk '{print $1,$2,$3, $6}' > File3.txt
paste file1 file2
a następnie wydrukować wybrane pola wawk
.file2
w pamięci, co może być przeszkodą, jeśli pliki są duże. Jest prostszy sposób na zrobienie tego bez narzutu pamięci (patrz moja odpowiedź).Jest to specjalne narzędzie do że:
paste
. Łączy każdą pełną linię z pierwszego pliku z odpowiednią linią z drugiego pliku; możesz usunąć niechciane kolumny przed lub po. Załóżmy na przykład, że kolumny są rozdzielane tabulatorami:Oto sposób wstępnego filtrowania obu plików, który polega na podstawieniu procesu ksh / bash / zsh.
Awk jest nastawiony przede wszystkim na przetwarzanie jednego pliku na raz, ale możesz zadzwonić,
getline
aby czytać z innego pliku równolegle.Do tej pory zakładałem, że chcesz dopasować wiersz 1 pliku 1 do wiersza 1 pliku 2, wiersz 2 pliku 1 z wierszem 2 pliku 2 itd. Jeśli chcesz dopasować zawartość kolumny, jest to zupełnie inna sprawa.
join
wykona zadanie pod warunkiem, że kolumna, którą chcesz dopasować, jest posortowana.źródło