Извлекайте информацию используя awk - PullRequest
0 голосов
/ 11 декабря 2018

Мой ввод:

group;|line1_1|line2_2|line3_3

Я хочу извлечь информацию line1, line2, line3, как показано ниже: line1, line2, line3

Я попытался с помощью следующей командыно не исполняемый:

LINE="group;|line1_1|line2_2|line3_3"; echo $LINE | awk -F ";" '{print $2}' | awk -F "|" '{for(i=1;i<=NF;++i){print $i | system("cut -d _ -f1")}}'

1 Ответ

0 голосов
/ 11 декабря 2018

Учитывая, что ваш фактический Input_file такой же, как показанные образцы.Не могли бы вы попробовать следующее.

awk -F'|' '{for(i=2;i<=NF;i++){sub(/_.*/,"",$i);val=val?val OFS $i:$i};print val;val=""}'  OFS=","  Input_file

2-е решение: Только с использованием sub и gsub из awk здесь.

awk '{sub(/^[^|]*\|/,"");gsub(/_[0-9]\|/,",");sub(/_[0-9]$/,"")} 1' Input_file
OR
awk '{gsub(/^[^|]*\||_[0-9]$/,"");gsub(/_[0-9]\|/,",")} 1' Input_file

Вывод будет следующим:

line1,line2,line3

Объяснение: Добавление пояснения к приведенному выше коду сейчас.

awk -F'|' '                    ##Setting field separator as | here for all lines.
{                              ##Starting block here.
  for(i=2;i<=NF;i++){          ##Starting for loop starting form i=2 to till value of NF here.
    sub(/_.*/,"",$i)           ##Using sub for substitution from _ to till everything with NULL in value of $i.
    val=val?val OFS $i:$i      ##Creating variable val and concatenate its own value if it is having NON ZERO value else save in it for 1st time.
  }                            ##Close for loop block here.
  print val                    ##Printing value of val here.
  val=""                       ##Nullifying value of variable val here.
}'  OFS=","  Input_file        ##Setting value of OFS to comma here and mentioning Input_file name here.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...