我正在尝试在数据文件中的每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粘贴。
答案 0 :(得分:2)
要每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。
如果这不是您想要的,请编辑您的问题以阐明您的要求,并提供简洁,可测试的样本输入和预期输出。
输入最新的问题,具体取决于inputB中的...
是什么,这可能是您真正应该使用的:
$ awk '
NR==FNR { a[NR]=$0; next }
{
sub(/^>/,"")
print (NF==1 ? a[++c] : ">") OFS $0
}
' inputA inputB
>1 1000
> ... ... ...
> ... ... ...
> ... ... ...
>0 2000
> ... ... ...
> ... ... ...
> ... ... ...
>1 3000
> ... ... ...
> ... ... ...
> ... ... ...
答案 1 :(得分:0)
EDIT2: 。您的问题从1急剧变化为另一个,没关系,请问您可以尝试关注2个文件的问题。
awk 'FNR==NR{a[FNR]=$0;next} NF==1{sub(/^>/,"");print a[++count],$0;next} 1' inputa inputb
编辑: 由于注释中提到的OP,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 $0 ORS ORS ORS;next} 1' Input_file
如果要将输出放入output_file,则也将> output_file
附加到上述代码中。