Как заменить определенную строку с помощью sed или awk на основе команды run

У меня есть файл csv, который выглядит так:

site1.com,aaa,bbb,ccc site2.com,qqq site3.com,rrr,uuu,ppp site4.com site5.com,ddd,sss 

Я хочу заменить строки (строки), где четвертый столбец пуст. и я хочу манипулировать указанными строками, запустив на них команду. Например, с awk :

 awk -F, '$4=="" {system("$1,cmd1 $1")}' test.csv 

Затем я хочу экспортировать следующим образом (output1 выводится из команды cmd1):

 site1.com,aaa,bbb,ccc site2.com,output1 site3.com,rrr,uuu,ppp site4.com,output1 site5.com,output1 

5 Solutions collect form web for “Как заменить определенную строку с помощью sed или awk на основе команды run”

 awk -F, '{ if ( $4 == "" ){printf "%s,",$1 ; system(CMD) ;}else {print $0}}' test.csv 

Если четвертая подана пустая, напечатайте первое поле с выходом команды, иначе распечатайте линию отверстия.

Но имейте в виду вывод команды, как она будет печатать

 awk -F, -vq=\' ' function shellquote(s) { gsub(q, q "\\" qq, s) return qsq } $4 == "" { printf "%s,", $1 system("cmd " shellquote($1)) next } {print}' 

shellquote часть shellquote . Рассмотрим случай значения $1 например ;reboot .

Вы можете использовать следующий код:

 awk -v output1="$(cmd1)" 'BEGIN{FS=OFS=","} NF&&NF<4{print $1,output1}1' file 

Опция -v устанавливает переменную output1 в результате команды оболочки cmd1 .

Заявление BEGIN{FS=OFS=","} задает разделитель запятой.

Если строка не пуста и число полей меньше 4, замените строку.

Наконец, 1 запускает инструкцию по умолчанию в awk : печатает всю строку.

может быть, это сообщение поможет вам https://stackoverflow.com/questions/20646819/how-can-i-pass-variables-from-awk-to-a-shell-command

 $ cat input.txt a,b,c,d a,b a,b,c,d a,b,c a,b,c,d $ awk -F, 'NF<4{cmd="echo output1";while(cmd|getline line){printf("%s,%s\n",$0,line)};close(cmd);next}1' input.txt a,b,c,d a,b,output1 a,b,c,d a,b,c,output1 a,b,c,d 
 sed -rn ' /\S+,\S+,\S+,\S+/{p;b} # if all four columns exist, print and branch to end s/^([^,]+).*/\1/ # else extract first column h # hold s/.*/echo output &/e # exeute external command echo with first column as argument G # append previous hold value s/(.*)\n(.*)/\2,\1/ # arrange position p' file # print result 
  • Как настроить интервал между символами после определенной строки?
  • Есть ли эквивалент для vim \ zs в sed или perl?
  • Добавление макроса TeX в начало файла с помощью sed (почему мой метод не работает?)
  • Как извлечь XML из текстового файла
  • Заменить только на первую совпадающую строку с sed
  • Как я могу удалить все между двумя маркерами в файле?
  • Полосы пробелов после одиночных заглавных букв с sed
  • Как удалить строки, содержащие некоторые имена в одном столбце в файлах txt
  • Извлечь URL из определенного шаблона (Google Alert)
  • Grep, начиная с фиксированного текста, до первой пустой строки
  • linux + ssh + выполняет две задачи в одном ssh и печатает в CSV
  • Interesting Posts

    Как назначить дополнительное имя IP / хоста для chrooted среды?

    Установите Linux на USB-накопитель, используя один USB-накопитель

    Сделать WGET доступным без пути

    Не удается запустить su после изменения прав доступа к файлу su

    Определение количества упавших пакетов в сырых сокетах

    Являются ли раскладки клавиатуры на X.org на самом деле называемыми макетами X.org или что?

    Немедленно распечатать список файлов архива (без распаковки всего архива)

    Тест командной строки CLI для случайного чтения / записи с заданным размером блока

    Какой стандарт используется подсказкой yum «Это нормально :«?

    Как отобразить имя драйвера звуковой карты из командной строки в Lubuntu 11.10?

    Можно ли определить, где находится .bash_profile в командной строке bash?

    Экран GNU mimic emacs frameset-to-register путем написания макета в файл

    Как указать домашний каталог Linux и оболочку на сервере Active Directory Samba?

    Приоритет логических операторов по сравнению с точкой с запятой

    XPS 13 9360 Драйвер для графического процессора Intel отсутствует

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