Включая дату в имени файла

Это должно работать -

awk -F"," -v OFS="," '
$NF=="()" {print $1,$2,"NONE";next}
{gsub(/\(|\)/,"",$NF);print}' INPUT_FILE

Объяснение:

  1. Мы устанавливаем Разделителя полей на , и выходной разделитель полей к ,. Установка OFS дает нам свободу постараться не печатать Ваших желаемых разделителей полей явно.

  2. Мы проверяем на шаблон $NF=="()" (где $NF является последним полем), если это верно, что мы распечатываем первое и второе поле и печать NONE как последнее поле. Так как Ваши демонстрационные данные только имели три поля, этот подход должен быть в порядке. Однако, если у Вас есть больше чем 5 полей затем с помощью простого for loop было бы идеально. Просто удостоверьтесь for loop работы как i=1;i<NF;i++ этим путем можно вручную поместить заключительное поле. Мы также используем next ключевое слово для перемещения в следующую строку, так как мы не хотим, чтобы второе действие работало на первой строке.

  3. Второй оператор действия верен для всех строк, которые не соответствуют первому. Здесь мы используем глобальную встроенную функцию замены, которая занимает место 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
0
12.12.2012, 16:35
2 ответа

Ваш вопрос немного неясен (как может 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"
4
28.01.2020, 02:21

Я собираюсь предположить, что Вы хотите взять ввод данных пользователем и удостовериться, что он следует за стандартным форматом (например, 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

Можно прочитать страницу справочника для даты для получения большей информации о формате.

0
28.01.2020, 02:21

Теги

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