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?

stokrotka
źródło
jaka powinna być nazwa pliku?
Rahul Patil
chcesz utworzyć plik każdej linii? Mam rację ?
Rahul Patil
sekwencyjne nazwy: unix.stackexchange.com/questions/164903/…
Ciro Santilli 26 改造 中心 法轮功 六四 事件

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.

don_crissti
źródło
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.

Rahul Patil
źródło
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"
Uwe
źródło