Возможное решение в awk
:
echo 'foo bar' | awk '{x=substr($1,1,1); y=substr($2,1,1); sub(x, y, $1); sub(y, x, $2); print $0}'
boo far
Два Вызов функции substr
будет извлекать первый символ из каждой записи, а два вызова функции sub
заменят первое появление этих символов друг на друга.
Чтобы извлечь строки, третье поле которых, разделенное пробелом -, точно равно S
, M
или D
, используйте один из
awk '$3 ~ /^[SMD]$/' file
или, используя сопоставление строк вместо сопоставления регулярных выражений,
awk '$3 == "S" || $3 == "M" || $3 == "D"' file
Условие без соответствующего блока будет действовать так, как если бы его блок просто был { print }
.
Я думаю, что ваше требование просто требует awk
, а не комбинацию с grep
. Если вы хотите напечатать всю строку, где третий столбец соответствует любой из этих букв, вам нужно сделать
awk '$3 ~ /^(S|M|D)$/' file