Это должно работать -
awk -F"," -v OFS="," '
$NF=="()" {print $1,$2,"NONE";next}
{gsub(/\(|\)/,"",$NF);print}' INPUT_FILE
Мы устанавливаем Разделителя полей на ,
и выходной разделитель полей к ,
. Установка OFS дает нам свободу постараться не печатать Ваших желаемых разделителей полей явно.
Мы проверяем на шаблон $NF=="()"
(где $NF является последним полем), если это верно, что мы распечатываем первое и второе поле и печать NONE
как последнее поле. Так как Ваши демонстрационные данные только имели три поля, этот подход должен быть в порядке. Однако, если у Вас есть больше чем 5 полей затем с помощью простого for loop
было бы идеально. Просто удостоверьтесь for loop
работы как i=1;i<NF;i++
этим путем можно вручную поместить заключительное поле. Мы также используем next
ключевое слово для перемещения в следующую строку, так как мы не хотим, чтобы второе действие работало на первой строке.
Второй оператор действия верен для всех строк, которые не соответствуют первому. Здесь мы используем глобальную встроенную функцию замены, которая занимает место brackets
ни к чему.
[jaypal:~/Temp] cat file
192.168.0.24,Up,()
192.168.0.25,Up,(host.domain.com)
192.168.0.24,Up,()
192.168.0.24,Up,()
192.168.0.25,Up,(host.domain.com)
192.168.0.25,Up,(host.domain.com)
[jaypal:~/Temp] awk -F"," -v OFS="," '
$NF=="()" {print $1,$2,"NONE";next}
{gsub(/\(|\)/,"",$NF);print}' file
192.168.0.24,Up,NONE
192.168.0.25,Up,host.domain.com
192.168.0.24,Up,NONE
192.168.0.24,Up,NONE
192.168.0.25,Up,host.domain.com
192.168.0.25,Up,host.domain.com
Ваш вопрос немного неясен (как может 150 файлов в dir родителя-одиночки, у всех есть то же имя файла?), таким образом, вот пример выполнения его с единственным названным файлом ABLIMITS.TXT
, который можно экстраполировать по мере необходимости:
В оболочке POSIX:
mv ABLIMITS.TXT "ABLIMITS_$(date '+%Y-%m-%d').TXT"
read -rp "Please enter date: " date
mv ABLIMITS.TXT "ABLIMITS_${date}.TXT"
Я собираюсь предположить, что Вы хотите взять ввод данных пользователем и удостовериться, что он следует за стандартным форматом (например, YYYY-MM-DD). Поэтому давайте попробуем что-то вроде этого:
for i in *
do
read -p "Enter date for $i: " d
mv "$i" "${i%.*}_$(date +%Y-%m-%d -d "$d").${i##*.}"
done
Можно прочитать страницу справочника для даты для получения большей информации о формате.