Заполните пустые строки в определенном столбце значениями

У меня есть данные следующего формата:

2342 1 6473 2 7463 2 3647 2734 1 9343 

Строки, которые не имеют значения во втором столбце, пусты в этом месте (т. Е. Нет места, вкладки и т. Д.). Я ищу простую команду, которая помещает '-9' в открытые места столбца 2.

(В основном команда awk которая проверяет, отлична ли строка в столбце 2, а затем добавляет «-9», если это так, я должен сказать …)

Расширенный пример (данные с большим количеством столбцов, некоторые из которых содержат пропуски). Я только хочу добавить '-9' в последний столбец (то есть другим столбцам разрешено иметь пропуски).

 2342 0 12 1 6473 13 2 7463 0 14 2 3647 0 2734 0 1 9343 0 16 

  • Извлечение значения между двойными кавычками
  • Возможно ли напечатать повторяющийся диапазон аргументов через cli из csv? (см. пример)
  • Использование переменной bash с escape-символом в awk для извлечения строк из файла
  • Сценарий оболочки для объединения двух файлов
  • Анализ с помощью awk путем изменения поля и записи разделителей
  • Сравните первый столбец из 2-х файлов на основе второго столбца, используя разделитель;
  • Добавление записей в конец строки через awk
  • AWK для создания CSV-файла
  • 4 Solutions collect form web for “Заполните пустые строки в определенном столбце значениями”

    Если ваши данные выражены в столбцах с фиксированной шириной, вы можете сделать следующее:

    Для первого случая:

     sed 's/^.\{4\}$/& -9/' 

    (добавьте " -9" к строкам из 4 символов).

    Для второго случая:

     sed -e '/.\{11\}/b' -e 's/$/ /;s/\(.\{10\}\).*/\1-9/' 

    (добавить до 10 пробелов и -9 до строк менее 11 символов).

    Как правило, для разбора строк с полями с фиксированной шириной, см. Специальную переменную FIELDWIDTHS для GNU awk .

    С помощью GNU sed

     sed ':;s/^.\{0,9\}$/& /;t;s/^.\{10\}$/&-9/' file 

    Добавляет одно пробел, если число символов меньше десяти, используя тест t .
    Затем заменяет строки с десятью символами и -9.

    Вы можете попробовать с этим awk с первым примером:

     awk 'NF == 1 { $2 = -9; } 1' file 

    Как упоминалось в других сообщениях с gawk вы можете использовать FIELDWIDTHS , так что вы можете попробовать это со своим вторым:

     gawk 'BEGIN { FIELDWIDTHS = "4 1 1 1 2 1 1"} { for (i = 1; i <= NF; i++) { if ($i == "") { if (i == 7) $i = "-9"; else $i = " "; } } printf("%s %s %s %s\n", $1, $3, $5, $7); }' file 

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

     perl -ane 'if(!$F[1]){print $F[0]," -9\n"}else{print $_;}' 

    Эта команда считывает вашу строку ввода и печатает «-9» во втором столбце, если она пуста.

     echo "2342 1 6473 2 7463 2 3647 2734 1 9343" | perl -ane 'if(!$F[1]){print $F[0]," -9\n"}else{print $_;}' 2342 1 6473 2 7463 2 3647 -9 2734 1 9343 -9 
    Interesting Posts

    Отображать и редактировать строки, соответствующие конкретному шаблону в vi

    Не удалось выполнить сценарий оболочки из правила «network» udev, чтобы изменить MAC-адрес

    Как предотвратить отскок писем SMTPUTF8

    Установка ftp без доступа в Интернет на RHEL 6

    Формирование исходящего трафика с помощью iptables

    Как вы обрезаете все столбцы в файле определенной длины?

    Программно изменить скорость воспроизведения (NOT pitch) в режиме реального времени

    Исходное синтаксическое объяснение переменных в bashrc

    Попытка удалить все идентификаторы из файла HTML с помощью grep

    Нужно ли останавливаться, чтобы действительно отключить питание?

    wait bash-builtin сжигает CPU на 100 процентов

    Поиск файлов, которые пользователь не может прочитать?

    Перенос репозитория APT из плоского в обычный формат прозрачно для конечного пользователя

    структура каталогов против файловой системы

    Макросы клавиатуры для X и / или KDE

    Linux и Unix - лучшая ОС в мире.