Chcę zebrać wszystkie wiersze tekstu w jeden wiersz. Jestem początkującym programistą, który stara się uczyć poprzez działanie. Spędziłem cztery godziny, próbując rozwiązać ten problem. Wiem, że istnieje proste rozwiązanie tego problemu. Oto, czego próbowałem.
sed -e 'N; s / \ n //' mój_plik.txt # Nic nie robi sed -e: a -e N -e 's / \ n / /' -e ta myfile.txt #output wszystkie pomieszane i nie mogę zrobić głowy ani ogona składni cat myfile.txt | tr -d '\ n'> mój_plik.txt # Usuwa wszystkie linie
Oto plik tekstowy:
500212 262578–4–4 23200 GRIFFITH LABORATORIES LTD LABORATORIA GRIFFITH RADA RADY POŁUDNIOWEJ DUBLINU GABINET BIURO (PRZEMYSŁOWE) Lista podlegająca ocenie 2 Pineview Industrial Estate Firhouse Road Knocklyon 31 grudnia 2007 r 01 sty 2008 ”
Nie mogę zrozumieć, gdzie popełniłem błąd…
cat reval_details.asp?Pno=500211.txt | tr -d '\n' > new_reval_details.asp?Pno=500211.txt
tr -d '\n' <input.txt > output.txt
uniknięcie bezużytecznego korzystania z kota i użycie jednej mniej niepotrzebnej rury.Oto jest To kolejne rozwiązanie i proste łatwe.
źródło
echo `cat Input.txt` > Output.txt
działa też, po prostu inny warianttr
rozwiązanie.PROSTA METODA
Inna metoda wykorzystująca awk,
Wydajność:
Uwaga:
ORS = '' -> To jest twój separator pól, możesz umieszczać dowolne znaki pomiędzy pojedynczymi cudzysłowami jako separator pól. Za pomocą tej metody awk możemy uwzględnić spacje i wszystkie znaki.
Mam nadzieję, że to może pomóc!
źródło
man awk
Nie ma potrzeby umieszczania etykiety
:a
poza główną instrukcją, nie jest też-e
potrzebna opcja; wreszcie/$/
jest zbędny (każda linia ma znak EOL).Ulepszanie innych odpowiedzi
Które jest jaśniejsze, jeśli jest napisane w następujący sposób,
Polecenie działa w następujący sposób:
N
dołącza następny wiersz do przestrzeni wzorów (wielowierszowej), która już zawiera bieżącą linię;s/\n/ /
zamień\n
wygenerowany znak nowej liniiN
spacją;
ta
przechodzi do wiersza skryptu następującego po etykiecie,:a
o ile zastąpienie w kroku 2 zakończyło się powodzeniem , tj. jeśli wystąpiło zastąpienie, wykonanie przeskakuje do kroku 1 bez „uderzenia” w koniec skryptu, tj. bez odczytu innej linii wprowadzania.Zwrócić uwagę na następujące;
sed
czyta wiersze z jednego pliku wejściowego przez jeden w kolejności, zaczynając od 1 linii ;:a
to tylko etykieta, a nie polecenie do wykonania;N
jest, co do zasady, wykonywane na każdej linii, ales/\n/ /
(zasadniczo wykonywany na każdej linii) jest sukces na każdej linii, ale ostatni , więcta
sprawia, że koniec osiągalny skryptu tylko wtedy, gdy ostatnia linia wejście jest czytane (jedyny wiersz, w któryms
nie powiedzie się), tak,p
komenda jest wykonywana.Zatem skrypt w zasadzie czyta pierwszy wiersz wejścia i dodaje kolejne wiersze jeden po drugim, za każdym razem zastępując nowy wiersz spacją; po dodaniu ostatniego wiersza (i
\n
zmianie spacji)N
nie może dołączyć żadnego wiersza,s
nie powiedzie się,ta
jest pomijany, osiągnięty jest koniec skryptu ip
wykonywana jest domniemana instrukcja rint na bieżącym dłuższym 1-liniowym obszarze wzorców .-i
Opcja zastępuje plik wejściowyfile
z całej 1 linii przestrzeni wzorca.źródło
GEDIT:
Wyszukiwania i zamiany
\n
z przestrzeni „”.Można uzyskać okno zastąpić przechodząc do „Szukaj” -> „Zamień”
lub poprzez keybpard skrót Ctrl+H
Zobacz zrzut ekranu poniżej:
Pierwotny tekst jest na liniach 1-14.
Wynik jest w linii 16.
źródło
Myślę, że najprostszym sposobem na to jest:
http://ss64.com/bash/paste.html
źródło
Spróbuj tego
http://anandsekar.github.io/joining-all-lines-in-a-file-using-sed/
źródło
Myślę, że po prostu zapomniałeś, że musisz powiedzieć sedowi, aby przekierował wyjście pliku yourfile.txt do pożądanego wyniku, newfile.txt. Wydaje się to być polecenie trzeba, ale tylko wtedy, gdy pliki próbują seryjnej nie są zbyt duże dla buforów SED:
sed -e :a -e N -e 's/\n/ /' -e ta yourfile.txt >newfile.txt
. Kredyt do innego forum tutaj , gdzie dyskutują sed-tych możliwości. Ja testowałem polecenie i pracował dla mnie.źródło
-i
przełącznikiem modyfikuje oryginalnego pliku inline , więc nie ma potrzeby wyjścia do innego pliku. Bądź ostrożny!a' sed -i :a -e N -i 's/\n/ /' -e ta reval_details.asp?Pno=500214.txt sed: can't find label for jump to
' sed -e: a -e N -i 's / \ n / / -e -e ta reval_details .asp? Pno = 500214.txt sed: nie można odczytać s / \ n / /: Brak takiego pliku lub katalogu # Wszelkie pomysły.Rozwiązanie Pure Bash:
źródło
Gdybym to był ja, po prostu otworzę go w vimie i naciśnij Shift+ Jkilka razy.
źródło
Wpisz w vimie i naciśnij Enter:
źródło
Podejście Python:
AWK:
źródło