Mam listę z 250 liniami. Muszę uruchomić je wszystkie przez serwer WWW, aby uzyskać listę wyników. Ta lista zwraca jednak o wiele więcej wierszy, niż jestem zainteresowany. Powiedzmy, że moje list.txt
to:
a.1
b.1
etc
następnie dane wyjściowe to output.txt
:
a.1 a b c
a.2 b a b
a.3 d k o
b.1 b o p
b.2 o i y
b.3 p i y
etc
Czy można użyć polecenia grep, aby wyszukać wszystkie słowa w list.txt w pliku output.txt, a następnie wygenerować listę „Wanted” Want.txt? Potrzebuję całego wiersza w moim pliku wyjściowym. Txt Jestem nowy w skryptach, ale chciałbym coś takiego
grep list.txt output.txt > wanted.txt
Nie znalazłem żadnych przykładów tego
Odpowiedzi:
Zignorowałbym
grep
ten. Jest dobry do wyrażeń regularnych, ale nie wygląda na to, że naprawdę potrzebujesz go tutaj.comm
może porównać dwa pliki i pokazać skrzyżowania. Korzystając z dokładnych przykładów:Jest to szybsze niż jakikolwiek grep, ale zależy (w dużym stopniu) od sortowanych plików. Jeśli nie są, możesz je wstępnie posortować, ale to zmieni dane wyjściowe, więc również zostanie posortowane.
Alternatywnie, ta odpowiedź od iiSeymour pozwoli ci to zrobić
grep
. Flagi proszą o plik wejściowy i wymuszają wyszukiwanie ciągów pełnych słów. To nie będzie zależało od zamówienia, ale będzie oparte naoutput.txt
zamówieniu. Odwróć pliki, jeśli chcesz je w kolejności list.txt.Jeśli twój
list.txt
jest naprawdę duży, być może będziesz musiał poradzić sobie z tym trochę iteracyjnie i przekazać każdą linię osobno. To znacznie wydłuży czas przetwarzania. W powyższymoutput.txt
czytałbyś raz, ale w ten sposób czytałeś i przetwarzałeś go dla każdej linii list.txt. To okropne ... Ale to może być twój jedyny wybór. Z drugiej strony sortuje rzeczy wedługlist.txt
kolejności.źródło
-1
pomija wiersze unikalne dla pierwszego pliku,-2
pomija wiersze unikalne dla drugiego pliku i-3
pomija wiersze wspólne dla obu plików . Aby uzyskać tylko wspólne linie, tłumimy unikalne, stąd-12
.