每 n 行插入多个空格

Insert multiple blanks every n rows

我试图在数据文件的每 n 行之后插入多个空行。

到目前为止,我有这一行,它在每 1 行之后插入 1 个空行:

awk '1 ; !(NR % 1) {print "";}' in.file >> out.file

然后我尝试循环它,所以我每 1 行插入 10 行:

awk '1; {for(i=0; i<10; i++)} !(NR % 1) {print "";}'

但我认为我的语法不正确。有什么建议么?

理想的输出是获取输入 A 并将其粘贴到输入 B,这样它看起来像这样:

(1) 输入-A

>1   
>0   
>1 

(2) 输入-B

>1000    
>... ... ...  
>... ... ...  
>... ... ...  
>2000    
>... ... ...  
>... ... ...  
>... ... ...  
>3000    
>... ... ...  
>... ... ...  
>... ... ...  

(3) 粘贴输入-A 和输入-B

>1  1000    
>   ... ... ...  
>   ... ... ...  
>   ... ... ...  
>0  2000    
>   ... ... ...  
>   ... ... ...  
>   ... ... ...  
>1  3000    
>   ... ... ...  
>   ... ... ...  
>   ... ... ... 

因此我尝试在输入 A 的行之间创建适量的空格,以便它可以轻松地与输入 B 粘贴。

EDIT2: 你的问题从 1 变成了另一个,没关系,请尝试关注你的 2 个文件问题。

awk 'FNR==NR{a[FNR]=[=10=];next} NF==1{sub(/^>/,"");print a[++count],[=10=];next} 1' inputa inputb

编辑: 由于评论中提到的 OP 希望在 Input_file 的第 10 行之后注入 12,000 行。好的,这是我可以编写一个循环的交易,每次在代码中迭代 12,000 次以打印空行并使代码对大文件的处理非常非常慢。我想出了一些方法,比如先创建一个包含 12,000 行空白的文件,然后在 awk 代码中简单地调用它来打印行,这比每次循环打印 12,000 行的方法快得多.

第一步: 创建一个包含 12,000 个空行的文件,如下所示。

awk 'BEGIN{while(++i<=12000){print "" > "blank_file"}}'

第二步: 检查文件中的行是否为 12,000。

wc -l "blank_file"
12000 blank_file

第三步: 使实际代码在您的实际代码中每次打印 12000 个空行。

awk 'FNR%10==0{print;system("cat blank_file");next} 1'  Input_file

注意: 在第二步中,您可以将 12000 更改为该循环中的空白行数,并可以打印更多或更少的行数。



假设您想在每 10 行 Input_file 之后插入 3 行,如果是这种情况,那么以下内容可能会对您有所帮助。

awk 'FNR%10==0{print [=14=] ORS ORS ORS;next} 1' Input_file

如果你想将输出输出到 output_file 中,那么也将 > output_file 附加到上面的代码中。

每输入 3 行插入 2 个空行:

$ seq 10 |
    awk -v n=2 -v m=3 '
        BEGIN {
            lines = sprintf("%*s",n-1,"")
            gsub(/ /,ORS,lines)
        }
        { print }
        (NR%m) == 0 {
            print lines
        }
    '
1
2
3


4
5
6


7
8
9


10

要改为每 10 个输入行打印 12,000 个空行,只需将 n=2 更改为 n=12000 并将 m=3 更改为 m=10。

如果这不是您想要的,请编辑您的问题以阐明您的要求并提供简明、可测试的示例输入和预期输出。

关于你更新的问题,取决于输入 B 中的 ... 是什么,这可能是你真正应该使用的:

$ awk '
    NR==FNR { a[NR]=[=11=]; next }
    {
        sub(/^>/,"")
        print (NF==1 ? a[++c] : ">") OFS [=11=]
    }
' inputA inputB
>1 1000
> ... ... ...
> ... ... ...
> ... ... ...
>0 2000
> ... ... ...
> ... ... ...
> ... ... ...
>1 3000
> ... ... ...
> ... ... ...
> ... ... ...