Скрипты AWK: как удалить разделитель полей с помощью awk - PullRequest
3 голосов
/ 02 июня 2010

Нужен следующий вывод

ONGC044 
ONGC043
ONGC042
ONGC041
ONGC046
ONGC047

с этого входа

Medium Label                   Medium ID                            Free Blocks
===============================================================================
[ONGC044] ECCPRDDB_FS_43       ac100076:4aed9b39:44f0:0001            195311616
[ONGC043] ECCPRDDB_FS_42       ac100076:4aed9b1d:44e8:0001            195311616
[ONGC042] ECCPRDDB_FS_41       ac100076:4aed9af4:4469:0001            195311616
[ONGC041] ECCPRDDB_FS_40       ac100076:4aed9ad3:445e:0001            195311616
[ONGC046] ECCPRDDB_FS_44       ac100076:4aedd04a:68c6:0001            195311616
[ONGC047] ECCPRDDB_FS_45       ac100076:4aedd4a0:6bf5:0001            195311616

Ответы [ 4 ]

6 голосов
/ 04 июня 2010
awk -F"[][]" 'NR>2{print $2}' file
3 голосов
/ 02 июня 2010

Я думаю, что вы хотите:

awk '/^\[.*\]/  {print substr($1,2,7)}' < ~/tmp/awk_test/file

Предполагается, что ваше первое поле содержит ровно 9 (7 из них - те, которые вам нужны) каждый раз. Если это не так, используйте вместо этого следующее для удаления [и] из первого поля:

awk '/^\[.*\]/  {gsub(/[\[\]]/,"",$1); print $1 }' < ~/tmp/awk_test/file
3 голосов
/ 02 июня 2010

Если данные действительно , что единообразно, очень простой канал для:

cut -b 2-8

сделает это за вас.

(О, кроме первых двух строк, избавьтесь от них с grep ^\[ в вашем конвейере, если вам нужно)

1 голос
/ 02 июня 2010

Вот решение, которое включает только awk. Идея состоит в том, чтобы позволить awk разобрать нужный столбец и удалить нежелательные квадратные скобки из этого токена. Единственный «трюк» - это «экранирование» символа [, чтобы он не понимался как начальный сброс. (Мы могли бы также использовать substr вместо этого, поскольку скобки ожидаются как первый и последний символы)

{
     #skip the column header lines
     if (NR < 3)
       next;

     # $1 is almost what we want: [xxxx] 
     #   ==> just remove the square brackets
     sub("[[]", "", $1);
     sub("]", "", $1);
     print $1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...