Подтвердить что ты не робот

Удалите нечетные или четные строки из текстового файла

Мне нужно удалить нечетные строки в текстовом файле, чтобы сделать выборку вниз. Я нашел эту команду,

awk 'NR%2==0' file

но он печатает только нечетные строки в терминале. Как их удалить?

Мне действительно не нужны четкие или нечетные, я хочу, чтобы они удалялись из файла или печатались в другом файле. Это только печатает их в терминале.

4b9b3361

Ответ 1

AWK

% является оператором модуля, а NR - текущим номером строки, поэтому NR%2==0 является истинным только для четных строк и будет вызывать для них правило по умолчанию ({ print $0 }). Таким образом, чтобы сохранить только четные линии, перенаправьте вывод из awk в новый файл:

awk 'NR%2==0' infile > outfile

СЕПГ

Вы можете сделать то же самое с sed. Ответ devnulls показывает, как это сделать с помощью GNU sed. Ниже приведены альтернативы для версий sed, у которых нет оператора ~:

сохранить нечетные строки

sed 'n; d' infile > outfile

сохранить четные строки

sed '1d; n; d' infile > outfile

Ответ 2

Использование команды GNU:

sed -i '0~2d' filename

чтобы удалить четные пронумерованные строки из файла.

Для удаления нечетных строк:

sed -i '1~2d' filename

Параметр -i приведет к тому, что изменения будут сохранены в файле на месте.

Цитата из руководства:

`FIRST~STEP'
     This GNU extension matches every STEPth line starting with line
     FIRST.  In particular, lines will be selected when there exists a
     non-negative N such that the current line-number equals FIRST + (N
     * STEP).  Thus, to select the odd-numbered lines, one would use
     `1~2'; to pick every third line starting with the second, `2~3'
     would be used; to pick every fifth line starting with the tenth,
     use `10~5'; and `50~0' is just an obscure way of saying `50'.

Ответ 3

Не сосредотачивайтесь на отрицательном (удаление линий), фокусируйтесь на положительном (выбираете линии), и ваше решение последует этому примеру. Поэтому вместо I need to remove odd lines вы должны думать I need to select even lines, а затем решение просто:

awk '!(NR%2)' file

Если вы хотите сохранить результат в новый файл:

awk '!(NR%2)' file > newfile

или обратно к оригиналу:

awk '!(NR%2)' file > newfile && mv newfile file

Ответ 4

Здесь пример awk для создания двух новых файлов, содержащих нечетные и четные строки, соответственно:

awk '{ if (NR%2) print > "odd.txt"; else print > "even.txt" }' input.txt

Ответ 5

Решение Perl для печати в новом файле:

perl -lne 'print if $. % 2 == 0' infile > outfile

Чтобы напечатать коэффициенты, измените == 1 на == 0

$. - номер строки

Сохраняется только в исходном файле:

perl -i -lne 'print if $. % 2 == 0' infile

То же, что и выше, но создает резервный файл с именем infile.bak:

perl -i.bak -lne 'print if $. % 2 == 0' infile

Ответ 6

Это может работать для вас (GNU sed):

 sed -n 'p;n' file # keep odd
 sed -n 'n;p' file # keep even