У меня есть огромное количество данных следующего формата, и я хочу вставить "" к каждому найденному числу. Ввод: 202, «Перо», 203, «Не назначено», 204, «Карандаш», 205, ...

1
Luka 15 Дек 2020 в 13:09

1 ответ

Лучший ответ

Не могли бы вы попробовать следовать, написано и протестировано в точности на основе показанных вами примеров в GNU awk.

awk '
($1~/^[0-9]+,$/){
   $1="\047"$1
   sub(/,$/,"\047&",$1)
}
1
' Input_file

ИЛИ, если у вас есть несколько полей, в которых вам нужно преобразовать все поля, начиная с цифр, заключенных в ', попробуйте выполнить следующее.

awk '
{
  for(i=1;i<=NF;i++){
    if($i~/^[0-9]+,$/){
      $i="\047"$i
      sub(/,$/,"\047&",$i)
    }
  }
}
1
' Input_file

<▪Explanation : Добавление подробного объяснения вышеизложенного. Объяснение для 1-го и 2-го решений одинаковы, только разница между этими 2: 1-е относится к 1-му полю с точки зрения подстановки, а 2-е решение проходит через все поля для выполнения подстановки.

awk '                         ##Starting awk program from here.
{
  for(i=1;i<=NF;i++){         ##Traversing through all fields of current line here.
    if($i~/^[0-9]+,$/){       ##Checking condition if current field starts from digits(continously) and ends with a comma then do following.
      $i="\047"$i             ##Adding single quote before current field then.
      sub(/,$/,"\047&",$i)    ##Substituting comma(comint at last of field) with single quote and comma in current field.
    }
  }
}
1                             ##1 will print current line here.
' Input_file                  ##Mentioning Input_file name here.
2
RavinderSingh13 15 Дек 2020 в 10:54