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 и сохраните его в желаемом формате.
Искусство здесь заключается в том, чтобы найти регулярное выражение, соответствующее вашим требованиям.
Например,
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";
}
}
}
это сработало!
sed 's/[0-9]*:[0-9]*=//g' file1.txt > file2.txt
ура и спасибо!
Чтобы удалить все вхождения <integer1>:<integer2>=
, где <integer1>
меньше <integer2>
, вы можете выполнить:
<file perl -pe 's{(\d+):(\d+)=}{$1 < $2 ? "" : $&}ge'
На 1:2= 20:3= 5:5=
это даст 20:3= 5:5=
.