将偶数行添加到奇数行;按原样保持偶数行

时间:2016-03-28 19:46:03

标签: awk sed

我正在尝试使用awk或sed将所有偶数行中的文本添加到所有奇数行的末尾,同时保持偶数行不变。

例如,我有:

>1
AAAA
>2
BBBB
>3
CCCC

我需要一个看起来像这样的新文件:

>1:AAAA
AAAA
>2:BBBB
BBBB
>3:CCCC
CCCC

结肠是任意的,但对于我需要的东西可以正常工作。文件很大(约3,000,000,000行!)所以它需要很快。不确定awk或sed是否会更好以及如何做到这一点。

3 个答案:

答案 0 :(得分:1)

awk救援!

$ awk -v OFS=: '!(NR%2){print p OFS $0; print} {p=$0}' file

>1:AAAA
AAAA
>2:BBBB
BBBB
>3:CCCC
CCCC

将OFS设置为所需的分隔符。

答案 1 :(得分:1)

这可能适合你(GNU sed):

sed -r 'N;s/\n(.*)/:\1&/' file

将奇数行添加到偶数行,并使用模式匹配格式化输出。

答案 2 :(得分:0)

cat sample.csv                                                                                                                                                                    
>1
AAAA
>2
BBBB
>3
CCCC

下面是awk脚本: 如果它是奇数行,则将值存储到数组中,当遇到下一个偶数行时,打印格式化的行

cat test.awk                                                                                                                                                                      
{
    if(NR %2 != 0){
        a[NR] = $0
    }else{
        print a[NR -1] ":" $0 "\n" $0
    }
}

运行它并显示结果:

awk -f test.awk  sample.csv                                                                                                                                                       
>1:AAAA
AAAA
>2:BBBB
BBBB
>3:CCCC
CCCC