РЕДАКТИРОВАТЬ: 2-е решение Добавление сюда более универсального c решения в соответствии с комментариями OP, это будет искать каждое поле и проверять, имеет ли оно prefix
, тогда оно будет печатать 2-я часть этого столбца (после _
one).
echo "prefix_foo,etc,bla,prefix_bar" |
awk '
BEGIN{
FS=OFS=","
}
{
for(i=1;i<=NF;i++){
if($i~/prefix/){
split($i,array,"_")
val=(val?val OFS:"")array[2]
}
}
if(val){
print val
}
val=""
}'
Чтобы напечатать значения выходного поля в новой строке, попробуйте:
echo "prefix_foo,etc,bla,prefix_bar" |
awk '
BEGIN{
FS=OFS=","
}
{
for(i=1;i<=NF;i++){
if($i~/prefix/){
split($i,array,"_")
print array[2]
}
}
}
'
1-е решение: Для простого случая (укажите c для показанных образцов), пожалуйста, попробуйте следующее.
awk -F'[_,]' '/prefix_/{print $2,$4}' Input_file
ИЛИ
echo "prefix_foo,prefix_bar" | awk -F'[_,]' '/prefix_/{print $2,$4}'