2017-01-27 2 views
2

Попытка заменить значение в ряде файлов с помощью команд оболочки (использовать в скрипте для итерации по файлам в каталоге).Замените значение только тогда, когда оно больше

Input file examples: 

file1: 
019=False 
051=Limited 
051>Limited Lease Time=2419200 

file2: 
019=False 
051=Limited 
051>Limited Lease Time=14400 

Это работало хорошо:

sed -e '/Limited Lease Time=/s/[0-9]\+$/86400/g' <infile >outfile 

# cat outfile 
019=False 
051=Limited 
051>Limited Lease Time=86400 

Но ... потом понял, что я заменял какую-либо ценность, в том числе те, ниже, чем 86400, когда я только хочу, чтобы заменить что-нибудь больше, чем 86400.

Я думал, что я мог бы использовать AWK, и это «вид» работал, как и в выходной был только линии «Limited Lease Time», который имеет значение> 86400:

awk -F= '/Limited Lease Time/ && $2 > 86400 { print $2 }' 

... Но это только outputing совпадающей строки, в то время как мне нужен оригинальный выход (3 строки в примерах), в том числе изменения, если соответствуют значению> 86400.

Цените некоторые советы по пути, чтобы обращаться это !

ответ

5

Используйте полевой разделитель = в Awk и получить строки в $2 больше, чем значение, которое вы установили,

awk 'BEGIN{FS=OFS="="} $0 ~ /\<Limited Lease Time\>/ && $2 > 86400 {$2=86400}1' file 

Для ввода-файла,

cat file 
019=False 
051=Limited 
051>Limited Lease Time=14400 
051>Limited Lease Time=94400 
051>Limited Time=14400 

Выполнение команды производит вывод как вам нужно.

awk 'BEGIN{FS=OFS="="} $0 ~ /\<Limited Lease Time\>/ && $2 > 86400 {$2=86400}1' file 
019=False 
051=Limited 
051>Limited Lease Time=14400 
051>Limited Lease Time=86400 
051>Limited Time=14400 

Кроме того, вы можете сделать это настраивается с помощью -v переменного импорта в Awk

awk -v thresh=86400 'BEGIN{FS=OFS="="} $0 ~ /\<Limited Lease Time\>/ && $2 > thresh {$2=thresh}1' file 
+1

отработали отлично, спасибо! Используется строка awk с импортом переменной -v, чтобы сделать ее более чистой в моем скрипте. Спасибо. Просто сейчас, чтобы прочитать справочную страницу и точно определить, что она делает ;-) – kpw

 Смежные вопросы

  • Нет связанных вопросов^_^