Podziel plik na wiele małych plików, oddzielonych symbolem nowej linii


13

Czy istnieje narzędzie, które dzieli plik według symbolu nowej linii? np. jeśli plik zawiera następujące wiersze,

aa
bbb
cccc

Jeśli chcę podzielić go na 3 pliki, pożądanym wynikiem byłoby:

aa, bbbI cccc(w 3 różnych plikach)

splitPolecenie już sprawdziłem , wycina tylko pliki według rozmiarów, a nie tego, czego chcę.

Jeśli sam nie napisałem narzędzia, czy jest jakieś standardowe narzędzie do użycia?


jaka powinna być nazwa pliku?
Rahul Patil

chcesz utworzyć plik każdej linii? Mam rację ?
Rahul Patil

Odpowiedzi:


14

Chyba że czegoś mi brakuje, splitjeśli używasz -lprzełącznika , dzieli się według linii :

   -l, --lines=NUMBER
          put NUMBER lines per output file

więc

split -l 1 inputfile

powinien robić co chcesz.


4
awk '{print > $0".txt" }'  inputfile

tworzyłby jeden plik na unikalny wiersz w pliku wejściowym nazwany na podstawie zawartości tych wierszy (z .txtrozszerzeniem). Ale uwaga: gdy limit współbieżnych otwartych plików zostanie osiągnięty, niektóre awkimplementacje zakończą się niepowodzeniem.

Lub

awk '{f = "output_file." NR; print $0 > f; close(f)}' inputfile

Aby mieć ponumerowane pliki wyjściowe.


Możesz zamknąć () plik wyjściowy po jego zapisaniu, w przeciwnym razie w większości implementacji awk napotkasz maksymalną liczbę otwartych plików.
Stéphane Chazelas

nie wiem o tym ... czy możesz to dla mnie zrobić? dzięki ..
Rahul Patil

3
A=0
while IFS= read -r LINE ; do
  printf '%s\n' "$LINE" > newfile$A
  (( A++ ))
done < "$INPUTFILE"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.