У меня большой файл, и мне нужно разбить его на два файла. Предположим, что в первом файле следует выбрать 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» с опцией lines.
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?