Как я могу копировать только строки с нечетными номерами из одного файла в другой?

У меня есть текстовый файл с некоторой информацией. Как я могу писать только строки с нечетными номерами из этого файла в новый файл? Использование сценария оболочки ..

7
задан 23 January 2018 в 04:57

4 ответа

awk 'NR%2' file > newFile

NR - номер текущей строки; NR%2 = нечетная строка

9
ответ дан 17 July 2018 в 22:28

Вы можете использовать sed:

sed '2~2d' file > new-file

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

13
ответ дан 17 July 2018 в 22:28
awk 'NR%2' file > newFile

NR - номер текущей строки; NR%2 = нечетная строка

9
ответ дан 23 July 2018 в 23:06
  • 1
    Это потому, что правило запускается, когда результат NR%2 равен 1? – RonJohn 22 January 2018 в 20:17
  • 2
    @RonJohn, да. NR%2 = 1 = True, который запускает действие по умолчанию: print – JJoao 23 January 2018 в 00:31
  • 3
    @JJoao: Незначительный nitpick: Язык Awk не имеет реальной «истины». стоимость. Вместо этого каждое ненулевое число оценивается как истинное в условных операторах. – David Foerster 18 February 2018 в 16:26
  • 4
    @DavidFoerster, Спасибо, я полностью согласен. (мой предыдущий комментарий упрощал ненулевую, непустую строку) – JJoao 19 February 2018 в 01:54

Вы можете использовать sed:

sed '2~2d' file > new-file

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

13
ответ дан 23 July 2018 в 23:06
  • 1
    « начинается со второй строки, соответствует каждой второй строке после этого », Разве это не все даже числа? – RonJohn 22 January 2018 в 20:06
  • 2
    @RonJohn да, он соответствует четным номерам и удаляет их из потока, оставляя нечетные нумерованные строки неповрежденными. Мы могли бы использовать sed '1~2!d', но зачем тратить байт? – Zanna 22 January 2018 в 20:09
  • 3
    @Zanna , но зачем тратить байт - говорят как настоящий код-golfer ! Фактически вы можете сохранить еще один байт с помощью sed 'n;d'. – Digital Trauma 23 January 2018 в 03:17
  • 4
    @DigitalTrauma для тех из нас, кто не знает sed: n;d печатает пространство шаблонов (текущая строка?) И заменяет пространство шаблонов следующей строкой, немедленно удаляет его, запускает следующий цикл: gnu .org / программное обеспечение / СЭД / ручной / sed.html # СЭД-команды-лист – jfs 23 January 2018 в 22:49

Другие вопросы по тегам:

Похожие вопросы: