Параметр awk split char

файл:

BASH.NIR SH.ABI 

Я хочу, чтобы awk покажет:

 User is NIR, SHELL is BASH User is ABI, SHELL is SH 

Я не знаю, как разбить параметр на char. Идея такова:

 cat file.txt | awk '{print "User is " afterDot($1) ", SHELL is " beforeDot($1)}' 

Вы можете использовать строковые функции в awk .

 $ (echo BASH.NIR; echo SH.ABI FOOBAR) | awk '{p=index($1,".");print "User is", substr($1,p+1) ", SHELL IS", substr($1,0,p-1)}' User is NIR, SHELL IS BASH User is ABI, SHELL IS SH 

Функция index возвращает позицию найденного символа (в данном случае – точку). И strstr вернет подстроку. Мы используем p+1 и p-1 чтобы не включать точку.

Для получения дополнительной информации см. Раздел «Строковые функции» страницы awk manpage.

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

 awk -F. '{ print "User is " $2 ", SHELL is " $1 }' file.txt