Заменить содержимое первого столбца, имеющего циклическую структуру

Думали ли вы об использовании службы AWS Systems Manager -Patch Manager ? Они обеспечивают удобный и простой способ отслеживать, какие исправления установлены на инстансах EC2, и обновлять их (без входа в систему ).

1
07.06.2021, 15:19
3 ответа

Использование GNU sed с включенным расширенным режимом регулярных выражений -E. Сначала мы изолируем первый столбец и запускаем команду y///, которая будет transliterateпространством шаблонов (, теперь оно имеет только первый столбец )в соответствии со схемой. Затем мы вспоминаем исходную строку и берем из нее 2-й столбец и отбрасываем исходный первый столбец.

sed -e '
  /^\S\s/!b
  s//&\n/;h
  s/\n.*//
  y/02345/23504/
  G;s/\n.*\n//
' file

2 a
3 b
5 c
0 d
4 e

Другие подходы могут быть:

perl -lpe '
  s/^\S\s/
      $& =~ tr[02345]
              {23504}r
  /ex;
' file

Или в качестве вкладыша -:

perl -lpe 's|^\S\s|$& =~ tr/02345/23504/r|e' file
python3 -c 'import sys
ifile = sys.argv[1]
with open(ifile) as fh:
  for l in fh:
    l = l.strip()
    p = l.find(" ")
    if p == 1:
      f1,rest = l[:p],l[p:];print(f1.translate(f1.maketrans("02345","23504")),rest,sep="")
    else:print(l)
' file

awk -v u="02345" -v v="23504" '
  BEGIN {
    gsub(/./, "&" FS, u)
    gsub(/./, "&" FS, v)
    split(u, a)
    for (i=1; i<=split(v,b); i++)
      c[a[i]] = b[i]
  }
  $1 in c{$1=c[$1]}1
' file
1
28.07.2021, 11:26
$ awk 'BEGIN{split("1 3 5 0 4",map); map[0]=2} {$1=map[$1]} 1' file
2 a
3 b
5 c
0 d
4 e



1
28.07.2021, 11:26

С оболочкой:

while read -r idx rest; do
  case $idx in 
    0) idx=2 ;; 
    2) idx=3 ;; 
    3) idx=5 ;; 
    4) idx=0 ;; 
    5) idx=4 ;;
  esac 
  echo "$idx $rest"
done < test.txt

Чтобы записать вывод обратно в исходный файл, один из

tmp=$(mktemp)
while... < test.txt > "$tmp" && mv "$tmp" test.txt

или установите moreutilsи

while... < test.txt | sponge test.txt

Или жемчуг:

perl -pe '
    BEGIN {%map = (0=>2, 2=>3, 3=>5, 4=>0, 5=>4)}
    s{(\d+)}{$map{$1} // $1}e
' test.txt
1
28.07.2021, 11:26

Теги

Похожие вопросы