Plik 1:
.tid.setnr := 1123
.tid.setnr := 3345
.tid.setnr := 5431
.tid.setnr := 89323
Plik2:
.tid.info := 12
.tid.info := 3
.tid.info := 44
.tid.info := 60
Plik wyjściowy:
.tid.info := 12
.tid.setnr := 1123
.tid.info := 3
.tid.setnr := 3345
.tid.info := 44
.tid.setnr := 5431
.tid.info := 60
.tid.setnr := 89323
text-processing
awk
sed
paste
pmaipmui
źródło
źródło
Odpowiedzi:
Używanie
paste
:źródło
Inne rozwiązanie awk:
źródło
paste
Rozwiązanie jest najbardziej przenośny i najbardziej efektywne. Wspominam tylko o tej alternatywie, jeśli wolisz jej zachowanie w przypadku, gdy dwa pliki nie mają takiej samej liczby wierszy:Z GNU
sed
:Jeśli
file1
ma mniej linii niżfile2
, to kiedyfile1
jest wyczerpany,sed
nie wypisze niczego dla niego (w przeciwieństwie do pustych linii dlapaste
).Jeśli
file1
ma więcej linii niżfile2
, to te dodatkowe linie zostaną odrzucone (w przeciwieństwie do drukowania pustych linii dofile2
zpaste
).źródło
Używanie
awk
(gawk
,nawk
,mawk
):NR==FNR {x[FNR]=$0;next}
:NR==FNR
jest dopasowywany tylko wtedy, gdy bieżący numer rekordu jest równy numerowi bieżącego pliku (stąd jest dopasowywany tylko podczas przetwarzania pierwszego pliku): zapisuje aktualnie przetwarzany rekord w tablicyx
o indeksie równym numerowi bieżącego pliku i pomija Aktualny zapis{print x[FNR]"\n"$0}
: drukuje zawartość tablicyx
pod indeksem równym bieżącemu numerowi rekordu pliku, po którym następuje nowa linia i treść bieżącego rekorduźródło
file1
ifile2
w poleceniu.mawk
również i to działa również na nim. W każdym razie jest uzasadnione nie mogę zrozumieć, dlaczego nie powinny pracować tylko na odwrót (czyli po prostu poprzez przełączanie plików). Nie chodzi o to, żeawk
dane wejściowe są ważne, linie są liniami. Gdyby coś nie było obsługiwane przez jego wersję, zepsułoby się po raz pierwszy. O wiele łatwiej, po prostu OP popełnił błąd, przełączając pliki wejściowe w argumentach.Najłatwiejsze rozwiązanie podano poniżej.
lub
źródło
file1
tej, jedna linia odfile2
itd.)