Задать вопрос

Как провести проверку в строке?

Есть строка:
0000000000000000;39999999999;2;NONE;true;526;246;101;100;2;1;;;;;;8;101/100.000.99.99;246/000.000.122.122

Все значения могут меняться.
Нужно каким-то образом сравнивать часть строки, содержащую: 526;246;101;100;2;1 с частью строки, содержащей значения до слеша, т.е в данном случае 101 и 246 (кусок строки 101/100.000.99.99;246/000.000.122.122)
И если в первом куске строки (526;246;101;100;2;1) есть такие же значения как во втором куске строки 101 и 246 (кусок строки 101/100.000.99.99;246/000.000.122.122) удалять их из первого куска строки.

Т.е на выходе должна быть в данном случае строка: 0000000000000000;39999999999;2;NONE;true;526;;;100;2;1;;;;;;8;101/100.000.99.99;246/000.000.122.122
  • Вопрос задан
  • 357 просмотров
Подписаться 1 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
Leksnsk
@Leksnsk
Проще всего наверное с помощью awk разобрать строку по разделителю ";" сравнить что вам нужно и собрать обратно.

если совсем в лоб:

#!/bin/bash


a="0000000000000000;39999999999;2;NONE;true;526;246;101;100;2;1;;;;;;8;101/100.000.99.99;246/000.000.122.122"

b=`echo $a | awk -F ";" '{print $7"-"$8}'`

c=`echo ${a} | awk -F ";" '{print $18}' | awk -F "/" '{print $1}'`

d=`echo ${a} | awk -F ";" '{print $19}' | awk -F "/" '{print $1}'`

if [[ "$b" == "$d"-"$c" ]]
then

echo $a | awk -F ";" '{print $1 ";" $2 ";" ";" $3 ";" $4 ";" $5 ";" $6 ";" ";" ";" ";" $9 ";" $10 ";" $11 ";" $12 ";" $13 ";" $14 ";" $15 ";" $16 ";" $17 ";" $18 ";" $19}'

fi
Ответ написан
@pcdesign
my $str = '0000000000000000;39999999999;2;NONE;true;526;246;101;100;2;1;;;;;;8;101/100.000.99.99;246/000.000.122.122';

 
#-------------------------------------------------------------------------------
#  Заменили дроби на ;
#-------------------------------------------------------------------------------
$str =~ s!/!;!gx;


#-------------------------------------------------------------------------------
#  Получили один большой массив
#-------------------------------------------------------------------------------

my (@arr) = split ';', $str;


#-------------------------------------------------------------------------------
#  Получаем дубликаты
#-------------------------------------------------------------------------------

my %seen = ();
my @dup = map { 1==$seen{$_}++ ? $_ : () } @arr;

say Dumper @dup;


На перле примерно так. Дальше сами справитесь?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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