bash-修剪txt文件中的偶数行

bash-修剪txt文件中的偶数行,bash,awk,sed,cut,tr,Bash,Awk,Sed,Cut,Tr,我想用bash从文件的所有偶数行中删除前X个字符和最后Y个字符 输入: 1 AABBBBBCCC 2 GKDDABC 设X=2,Y=3: 1 BBBBB 2 DD Gnu sed具有~步进地址运算符2~2表示“从第2行开始,每隔一行匹配一次” 使用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 工作原理: -vx=2-vy=3 -v选项定义了两个变量,x和y

我想用bash从文件的所有偶数行中删除前X个字符和最后Y个字符

输入:

1
AABBBBBCCC
2
GKDDABC
设X=2,Y=3:

1
BBBBB
2
DD

Gnu sed具有
~
步进地址运算符<代码>2~2表示“从第2行开始,每隔一行匹配一次”


使用
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
工作原理:

  • -vx=2-vy=3

    -v
    选项定义了两个变量,
    x
    y

  • 0==NR%2{$0=substr($0,x+1,长度($0)-y-x)}

    NR是行计数器。当
    0==NR%2
    时,我们处于偶数行上,我们从开头删除
    x
    字符,从结尾删除
    y
    。在
    awk
    中,
    $0
    是整行。我们替换为一个子串,该子串从位置
    x+1
    开始,长度为
    length($0)-y-x

  • 1

    这是打印这一行的隐晦速记

这可能适合您(GNU-sed):

或者,如果要参数化:

x=2 y=3
sed -r "n;s/^.{$x}(.*).{$y}$/\1/" file
其中
n
为替换命令打印偶数行中的奇数行

$ 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
sed -r 'n;s/^.{2}(.*).{3}$/\1/' file
x=2 y=3
sed -r "n;s/^.{$x}(.*).{$y}$/\1/" file