Bash скрипт для обновления последнего персонажа - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть один текстовый файл, который заканчивается двумя типами строк, такими как 100 м, 200 м или 6, 7 и т. Д. Когда последняя строка не содержит символа «m», сценарий bash должен умножить его на 1024 идобавить с м.Никаких изменений не должно произойти со строками, заканчивающимися на m.

Я пробовал несколько выражений if, else с awk, но не смог найти правильный результат.Пожалуйста помоги.По соображениям безопасности я не могу поделиться файлом, но предоставив образец ниже

Входной файл

fwhjgqdgqdg 100m
gdjegdegge 200m
fdfqwkdgqwdgqwdgh 300m
fhwfgwgdgw1 8998m
tdfdyfdgeu 6
feuegdhe 2
ffhevjevf 0
jhedhevhjkd 0

вывод должен быть

fwhjgqdgqdg 100m
gdjegdegge 200m
fdfqwkdgqwdgqwdgh 300m
fhwfgwgdgw1 8998m
tdfdyfdgeu 6124m
feuegdhe 2048m
ffhevjevf 0m
jhedhevhjkd 0m

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019

Не могли бы вы попробовать следующее.

awk -v var="1024" -v field="2" -v char="m" '$field !~ char{$field= ($field * 1024) char} 1' Input_file

Объяснение: Я создал переменные с именем var: которые будут иметь значение, которое вы хотите умножить, field здесь можно указать номер поля, в какое поле вы хотите поставить галочку, char какой символ вы хотите проверить, присутствует в строке или нет.

Вы можете изменить эти значения в соответствии с вашими потребностямитоже.Теперь внутри команды awk я проверяю условие, если $field строки НЕ имеет значения var, затем выполните следующее, то есть для значения нескольких полей со значением переменной var и объединенного значения переменной char.

Наконец, при упоминании 1 будет напечатана отредактированная / нередактированная строка для файла ввода.

0 голосов
/ 26 февраля 2019

Попробуйте Perl

perl -pe ' s/(\d+)$/1024*$1/ge and s/$/m/ ' 

с заданными вами значениями

$ cat subit.txt
fwhjgqdgqdg 100m
gdjegdegge 200m
fdfqwkdgqwdgqwdgh 300m
fhwfgwgdgw1 8998m
tdfdyfdgeu 6
feuegdhe 2
ffhevjevf 0
jhedhevhjkd 0

$ perl -pe ' s/(\d+)$/1024*$1/ge and s/$/m/ ' subit.txt
fwhjgqdgqdg 100m
gdjegdegge 200m
fdfqwkdgqwdgqwdgh 300m
fhwfgwgdgw1 8998m
tdfdyfdgeu 6144m
feuegdhe 2048m
ffhevjevf 0m
jhedhevhjkd 0m

$
0 голосов
/ 26 февраля 2019

Попробуйте следующее -

$ awk '$NF !~ /m/{$NF = ($NF * 1024) "m"} 1' file
fwhjgqdgqdg 100m
gdjegdegge 200m
fdfqwkdgqwdgqwdgh 300m
fhwfgwgdgw1 8998m
tdfdyfdgeu 6144m
feuegdhe 2048m
ffhevjevf 0m
jhedhevhjkd 0m

$NF - это значение последнего поля записи (строки).Если он не содержит m, умножьте на 1024 и объедините m.1 в конце является истинным условием, которое заставляет awk вызывать действие по умолчанию при печати записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...