Как я могу напечатать $ 1 и все совпадающие слова в строке, но не другие слова?

Обычно я запускаю все эти приложения одновременно. Затем я выполняю команду free -m , чтобы проверить доступную память. Если он почти заполнен, я создаю пространство подкачки размером половину размера RAM . А потом продолжаем дальше.

Технически было сказано, что пространство подкачки должно быть в два раза больше размера ОЗУ (поведение Windows по умолчанию)

0
23.03.2018, 20:37
3 ответа

Решение awk:

$ awk '{printf "%s : ", $1; for( i=3; i<=NF; i++ ) { if( $i ~ /^MPT_group/ ) { printf "%s ", $i }  } print "" }' input
user1 : MPT_group1
user2 : MPT_group1 MPT_group3 MPT_group4
user3 : MPT_group2 MPT_group3

Чтобы сделать это более читабельным, вот голая awkчасть скрипта:

{
   printf "%s : ", $1; 
   for( i=3; i<=NF; i++ ) { 
      if( $i ~ /^MPT_group/ ) { 
         printf "%s ", $i }
      } 
   print ""
}
0
28.01.2020, 04:27

Awkраствор:

awk '{ r=$1 OFS $2; for(i=3; i<=NF; i++) if ($i ~ /^MPT_group/) r=r OFS $i; print r }' file

Выход:

user1 : MPT_group1
user2 : MPT_group1 MPT_group3 MPT_group4
user3 : MPT_group2 MPT_group3
0
28.01.2020, 04:27

Сgrep:

$ grep -Po '^\S*\s*: (MPT_group\d+\s*)+' infile
user1 : MPT_group1
user2 : MPT_group1 MPT_group3  MPT_group4
user3 : MPT_group2 MPT_group3
0
28.01.2020, 04:27

Теги

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