У меня есть файл с именем: input:

160957 docliente_up hdfs://nameservice1/user/hive/warehouse/docliente_up.db
160958 docliente_bu hdfs://nameservice1/user/hive/warehouse/docliente_bu.db

Я использую awk для сравнения $ 2 со словами, заканчивающимися на

awk '{ if ($2 = "*_up" ) 
print "UPDATE DBS SET DB_LOCATION_URI=\"hdfs://nameservice1/databases_users/" $2"\"" " WHERE DB_ID=\""$1"\";";
else 
print "UPDATE DBS SET DB_LOCATION_URI=\"hdfs://nameservice1/databases/" $2"\"" " WHERE DB_ID=\""$1"\";";}' input

Но не работа Я искал выражение для решения своих проблем, но не могу его найти.

awk
0
Skiel 27 Май 2019 в 15:27

2 ответа

Лучший ответ

Не могли бы вы попробовать следующее.

awk '($2 ~ /_up$/){print "UPDATE DBS SET DB_LOCATION_URI=\"hdfs://nameservice1/databases_users/" $2"\"" " WHERE DB_ID=\""$1"\";"}'  Input_file

Вывод будет следующим.

UPDATE DBS SET DB_LOCATION_URI="hdfs://nameservice1/databases_users/docliente_up" WHERE DB_ID="160957";
0
RavinderSingh13 27 Май 2019 в 12:47

Вы должны сделать if в блоке и добавить фигурные скобки:

awk ' { if ($2 ~ /_up/) { print "YES ", $0 } else { print "NO ", $0 } }' /tmp/SO

Схожий вопрос по Stackoverflow.

0
Aif 27 Май 2019 в 13:09