Znalazłem to pytanie/odpowiedź w Google i wygląda na to, że odnosi się do bardzo określonego zestawu danych znalezionych w innym pytaniu (How to merge two files using AWK?). Poniżej znajduje się odpowiedź, której szukałem (i myślę, że większość ludzi byłaby), tj. Po prostu łączenie każdej linii z dwóch różnych plików przy użyciu AWK. Choć prawdopodobnie można korzystać z niektórych narzędzi UNIX jak przyłączenia lub pasty, AWK jest oczywiście znacznie bardziej elastyczny i potężny, jeśli sygnał wyjściowy jest inny, za pomocą razie oświadczenia, lub zmieniając OFS (które mogą być bardziej trudne w zależności od narzędzia, patrz poniżej), na przykład, zmieniając wydatek znacznie bardziej wyrazisty sposób (istotną uwagę na skrypterów powłoki)
dla prostej linii po linii łączenie:
awk 'FNR==NR { a[FNR""] = $0; next } { print a[FNR""], $0 }' file1 file2
.
Emuluje to funkcję tablicy indeksowanej numerycznie (AWK ma tylko tablice asocjacyjne) za pomocą niejawnej konwersji typów. Jest względnie ekspresyjny i łatwy do zrozumienia.
Korzystanie dwa pliki o nazwie test1 i test2 z następującymi liniami:
test1:
line one
line two
line three
test2:
line four
line five
line six
uzyskać ten wynik:
line one line four
line two line five
line three line six
W zależności od ho Jeśli chcesz dołączyć wartości między kolumnami na wyjściu, możesz wybrać odpowiedni separator pól wyjściowych. Oto przykład z elipsami (...) Oddzielające kolumny:
awk 'BEGIN { OFS="..."} FNR==NR { a[(FNR"")] = $0; next } { print a[(FNR"")], $0 }' test1 test2
Plonowanie ten wynik:
line one...line four
line two...line five
line three...line six
Mam nadzieję, że przynajmniej ten inspiruje wszystkich do skorzystania z mocą AWK!
Kent, doskonałe wyjaśnienie; Dziękuję Ci bardzo. Nie zdawałem sobie sprawy, że "FNR == NR" tworzył rodzaj stwierdzenia "jeśli". Właśnie tego potrzebuję, aby móc iść naprzód. Wielkie dzięki za poświęcenie czasu na pomoc! – jkovba