Я хотел бы удалить первые символы X и последние символы Y из всех четных строк файла с помощью bash.
Вход:
1
AABBBBBCCC
2
GKDDABC
пусть X=2 и Y=3:
1
BBBBB
2
DD
Я хотел бы удалить первые символы X и последние символы Y из всех четных строк файла с помощью bash.
Вход:
1
AABBBBBCCC
2
GKDDABC
пусть X=2 и Y=3:
1
BBBBB
2
DD
Использование awk
:
$ awk -v x=2 -v y=3 '0==NR%2 {$0=substr($0,x+1,length($0)-y-x)} 1' file
1
BBBBB
2
DD
Как это работает:
-v x=2 -v y=3
Параметры -v
определяют две наши переменные, x
и y
.
0==NR%2 {$0=substr($0,x+1,length($0)-y-x)}
NR - счетчик строк. Когда 0 == NR%2
, мы находимся на четной строке и удаляем x
символов с начала и y
с конца. В awk
$0
это вся строка. Мы заменяем подстроку, которая начинается с позиции x+1
и имеет длину length($0)-y-x
.
1
Это загадочное сокращение для печати строки.
Gnu sed имеет оператор адреса шага ~
. 2~2
означает "начать со строки 2, совпадать с каждой второй строкой".
x=2
y=3
sed "2~2{s/^.\{$x\}//;s/.\{$y\}$//}" input
Это может сработать для вас (GNU sed):
sed -r 'n;s/^.{2}(.*).{3}$/\1/' file
или если вы хотите параметризовать:
x=2 y=3
sed -r "n;s/^.{$x}(.*).{$y}$/\1/" file
Где n
печатает нечетные строки, рисуя четные строки для команды подстановки.