Как извлечь 3ccc2392-45ed-11e7-bc98-4061862b8d34:1-35942477 из следующей строки?

mysql-bin.000025    217141189   3ccc2392-45ed-11e7-bc98-4061862b8d34:1-35942477,

Он извлекается через line=$(head -n 1 ./xtrabackup_binlog_info)

0
schrodigerscatcuriosity 9 Фев 2021 в 22:54
Выводит ли эхо $line | awk ‘{ sub(/,/”,”,$3); напечатать $3 }’ работу?
 – 
Andre Wildberg
9 Фев 2021 в 22:58
Эти поля разделены пробелом или табуляцией (или их комбинацией)?
 – 
AdminBee
11 Фев 2021 в 17:40

3 ответа

Лучший ответ
echo $line | awk -F '[ ,]' '{print $3}'

Это использует echo для печати значения $line, а затем использует awk для установки разделителя в виде пробела или , и печатает третье поле.

Выход:

3ccc2392-45ed-11e7-bc98-4061862b8d34:1-35942477

Если вы делаете это с помощью head, а не echo $line, результат достигается с помощью:

head -n 1 ./xtrabackup_binlog_info | awk -F '[ ,]' '{print $8}'

Важно четко понимать, какой метод вы хотите использовать в своем вопросе.

0
Nasir Riley 9 Фев 2021 в 23:13
Вывод пуст
 – 
clarkk
9 Фев 2021 в 23:02
Используете ли вы GNU awk и действительно ли устанавливаете $line так, как указано в вопросе? Я проверил это с помощью GNU awk и получил ожидаемый результат.
 – 
Nasir Riley
9 Фев 2021 в 23:04
# head -n 1 ./xtrabackup_binlog_info | awk -F '[ ,]' '{print $3}'
 – 
clarkk
9 Фев 2021 в 23:05
У меня дебиан 10
 – 
clarkk
9 Фев 2021 в 23:06
Команда Насира и моя работают с вашим образцом, здесь чего-то не хватает.
 – 
schrodigerscatcuriosity
9 Фев 2021 в 23:06

Вот так с awk:

$ line="$(head -n 1 ./xtrabackup_binlog_info)"

$ echo "$line" | awk -F'[[:blank:]]+|,' '{ print $3 }'
3ccc2392-45ed-11e7-bc98-4061862b8d34:1-35942477
1
schrodigerscatcuriosity 9 Фев 2021 в 23:22
Это возвращает только i
 – 
clarkk
9 Фев 2021 в 23:02

Используйте awk:

awk 'BEGIN{ FS="[,[:blank:]]+"; }; { print $(NF-1); exit; }'
1
αғsнιη 9 Фев 2021 в 23:28