заменить все вхождения двоеточия и значения вокруг него для вкладки

1. Преобразуйте ваш файл в файл csv -

Быстрый и грязный метод, который будет работать, только если ваши входные -данные не содержат пробелов и/или;:

$ paste - - < yourfile | awk 'OFS=";" {print $1,$2}' | tee outputfile.csv
A;B
C;D
E;F

Если ваши данные содержат пробелы и/или ;, вам потребуется использовать специализированные инструменты, такие какmiller:

$ paste - - < yourfile | tee tabsep 
A   B
C   D
E   F

$ mlr --ifs tab --ofs comma --quote-all --ocsv --headerless-csv-output cat tabsep \
| tee outputfile.csv
"A","B"
"C","D"
"E","F"

Вы можете установить millerс помощью менеджера пакетов дистрибутивов -или получить его с github .

2. Загрузите outputfile.csvв Excel и сохраните его в желаемом формате.

-1
09.11.2020, 13:51
3 ответа

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

Например,

sed 's/[0-9]:[0-9]=//'

будет соответствовать всем шаблонам, которые вы записали -, но также будет соответствовать 3:2=, что может быть не то, что вам нужно.

Но вы должны иметь возможность использовать, например,:

sed 's/1:[2-6]=//;s/2:[3-6]=//;s/3:[4-6]=//;s/4:[56]=//;s/5:6=//'

что уже намного меньше печатает.

Если ваши числа больше одной цифры, это становится проблемой. Можно плюнуть в два шаблона, например:

s/5:[6-9]=//;s/5:1[0-6]=//

, но в какой-то момент awkили perlкажутся более подходящими инструментами.

#!/usr/bin/perl
  
while (<>){
    chomp;
    if (/(.*)([0-9]+):([0-9]+)=(.*)/){
        if ($2<$3){
            print "$1$4";
        }
        else {
            print "$1$2i:$3=$4\n";
        }
    }
}
1
18.03.2021, 22:51

это сработало!

sed 's/[0-9]*:[0-9]*=//g' file1.txt > file2.txt

ура и спасибо!

0
18.03.2021, 22:51

Чтобы удалить все вхождения <integer1>:<integer2>=, где <integer1>меньше <integer2>, вы можете выполнить:

<file perl -pe 's{(\d+):(\d+)=}{$1 < $2 ? "" : $&}ge'

На 1:2= 20:3= 5:5=это даст 20:3= 5:5=.

0
18.03.2021, 22:51

Теги

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