У мене великий файл і потрібно розділити його на два файли. Припустимо, в першому файлі слід вибрати 1000 рядків і помістити в інший файл і видалити ці рядки з першого файлу.
Я спробував використовувати, splitале це створює кілька фрагментів.
У мене великий файл і потрібно розділити його на два файли. Припустимо, в першому файлі слід вибрати 1000 рядків і помістити в інший файл і видалити ці рядки з першого файлу.
Я спробував використовувати, splitале це створює кілька фрагментів.
Відповіді:
Найпростіший спосіб, ймовірно , для використання headі tail:
$ head -n 1000 input-file > output1
$ tail -n +1001 input-file > output2
Це поставить перші 1000 рядків input-fileзсередини output1, а всі рядки від 1001 до кінцяoutput2
Я думаю, що splitце найкращий підхід.
Спробуйте скористатись -l xxxxопцією, де xxxx - це кількість рядків, які потрібно у кожному файлі (за замовчуванням - 1000).
Ви можете використовувати цю -n yyопцію, якщо вас більше турбує кількість створених файлів. Використання -n 2розділить ваш файл лише на 2 частини, незалежно від кількості рядків у кожному файлі.
Ви можете порахувати кількість рядків у вашому файлі wc -l filename. Це команда 'wordcount' з опцією рядки.
man splitman wcsplit -l 1000 bigfile && mv xaa piece1 && cat x?? > piece2 && rm x??.
Це робота для csplit:
csplit -s infile 1001
буде sрозрізнено infile, перший фрагмент xx00- до, але не включаючи рядок 1001, а другий xx01- інші рядки.
Ви можете грати з параметрами, якщо вам потрібні різні назви вихідних файлів, наприклад, використовуючи -fта вказуючи префікс :
csplit -sf piece. infile 1001
створює два файли з ім'ям piece.00таpiece.01
З розумним headви також можете зробити щось на кшталт:
{ head -n 1000 > 1st.out; cat > 2nd.out; } < infile
csplit. Дуже хороша. (Я просто читаю список команд POSIX, і спочатку виникли величезні проблеми з обгортанням голови навколо csplitмети команди. Виявляється, це дійсно просто.) :)
Простий спосіб зробити те, що запитує, за допомогою однієї команди:
awk '{ if (NR <= 1000) print > "piece1"; else print > "piece2"; }' bigfile
або для тих, хто насправді ненавидить набирати довгі, інтуїтивно зрозумілі команди,
awk '{ print > ((NR <= 1000) ? "piece1" : "piece2"); }' bigfile
split --help?