Mam dwa pliki, z których chcę utworzyć trzeci, który zawiera wszystkie informacje.
plik 1:
a 111
b 222
c 333
d 666
e 777
plik 2:
111 x1
222 x2
333 x3
444 x4
555 x5
666 x6
777 x7
888 x8
Chciałbym je połączyć w następujący sposób:
111 x1 a
222 x2 b
333 x3 c
444 x4 0
555 x5 0
666 x6 d
777 x7 e
888 x8 0
Uwaga:
Druga kolumna pliku 1 jest podzbiorem pierwszej kolumny pliku 2
command-line
text-processing
gforce89
źródło
źródło
-e0
, nie potrzebujesz perla :)Za pomocą dołączenia:
Polecenie join łączy linie dwóch plików, które mają wspólne pole danych. W takim przypadku: Połącz plik 2 i plik 1, używając pola 1 (
-1 1
) pliku 2 i pola 2 (-2 2
) pliku 1.Dane wyjściowe to: „pole połączone, pole 2 pliku 2, pole 1 pliku 1” (
-o'0,1.2,2.1'
), jeśli brakuje pola, wpisz 0 (-e0
)Jeśli jeden z dwóch plików ma więcej rekordów, dodaj je (w tym przypadku file2) (
-a1
)Proszę odnieść się do strony manuala polecenia join
źródło
Trochę
awk
magii:lub
Wynik
Wyjaśnienie
FNR==NR{a[$2]=$1;next}
Uruchamia
file1
(FNR==NR
) i tworzy strukturę klucz-wartość. Klucz to druga kolumna ($2
) zfile1
, wartość to pierwsza kolumna ($1
) zfile1
{if(a[$1]==""){a[$1]=0};print $1,$2,a[$1]}
Działa
file2
iif(a[$1]==""){a[$1]=0}
Jeśli klucz w pierwszej kolumnie (
$1
) wfile2
nie istniejefile1
, potrzebujemy0
print $1,$2,a[$1]
Wydrukuj (używając
print
) pierwszą i drugą kolumnęfile2
oraz wartość struktury klucz-wartość za pomocą klucza pierwszej kolumny ($1
)file2
lub
printf "%s%s%s%s%s\n",$1,FS,$2,FS,a[$1]}'
Wydrukuj (używając
printf
) pierwszą i drugą kolumnęfile2
oraz wartość struktury klucz-wartość za pomocą klucza pierwszej kolumny ($1
) zfile2
.FS
to separator między kolumnami pobrany z pliku wejściowego"%s%s%s%s%s\n"
jest formatowaniem danych wyjściowych
%s
- Strunowy\n
- Nowa liniaźródło
Używając q :
Czasami może być bardziej czytelny.
źródło
q
jest w pakieciepython3-q-text-as-data
(Python 3) i w pakieciepython-q-text-as-data
(Python 2).q
pakiet? I nie wydaje się, aby móc zainstalować albopython-q-text-as-data
albopython3-q-text-as-data
. „E: Nie można znaleźć pakietu python3-q-text-as-data”. Mój system już został zainstalowanypython
,python2.7
,python3
, ipython3.4
.