Awk 将新行添加到特定行

Awk 将新行添加到特定行,awk,sed,Awk,Sed,希望有人能帮我 我有大量不同行数的文件。 我想在文件中添加新行,直到特定的行,比如6行 infire.txt text1 text2 text3 我想要的文件是 Outfile.txt text1 text2 text3 \n \n \n 在awk的END块中,内置变量NR将包含文件最后一行的行号。从那里很容易打印所需数量的额外空行 $ awk -v lines=6 '1; END {for (i=NR; i<lines; ++i) print ""}' file tex

希望有人能帮我

我有大量不同行数的文件。 我想在文件中添加新行,直到特定的行,比如6行

infire.txt

text1 
text2
text3 
我想要的文件是

Outfile.txt

text1 
text2
text3 
\n 
\n 
\n

在awk的
END
块中,内置变量
NR
将包含文件最后一行的行号。从那里很容易打印所需数量的额外空行

$ awk -v lines=6 '1; END {for (i=NR; i<lines; ++i) print ""}' file 
text1
text2
text3



$ awk -v lines=6 '1; END {for (i=NR; i<lines; ++i) print ""}' file | wc -l
6

$awk-v行=6'1;END{for(i=NR;i在awk的
END
块中,内置变量
NR
将包含文件最后一行的行号。从那里可以轻松打印所需的额外空行数

$ awk -v lines=6 '1; END {for (i=NR; i<lines; ++i) print ""}' file 
text1
text2
text3



$ awk -v lines=6 '1; END {for (i=NR; i<lines; ++i) print ""}' file | wc -l
6
$awk-v lines=6'1;END{for(i=NR;iShortawk解决方案:

awk -v r=6 'END{ while((r--)-NR>0) print "" }1' file
  • -vr=6
    -表示总行数/最大行数的变量
    r
    • Shortawk解决方案:

      awk -v r=6 'END{ while((r--)-NR>0) print "" }1' file
      
      • -vr=6
        -表示总行数/最大行数的变量
        r

      IMHO最清晰、最明显的处理方法是简单地从最后一个行号加1循环到目标行号:

      $ seq 3 | awk -v n=6 '{print} END{for (i=NR+1; i<=n; i++) print ""}'
      1
      2
      3
      
      
      
      $
      

      但是,为了简洁而牺牲清晰度是不值得的。

      IMHO处理这一问题最清晰、最明显的方法是简单地从最后一行数加1循环到目标行数:

      $ seq 3 | awk -v n=6 '{print} END{for (i=NR+1; i<=n; i++) print ""}'
      1
      2
      3
      
      
      
      $
      

      但是我认为这是为了简洁而牺牲清晰度的做法,不值得。

      无论行数和内容如何,您都需要在文件中添加6行空行?或者您这样做是否有任何逻辑?无论行数和内容如何,您都需要在文件中添加6行空行?或者您这样做是否有任何逻辑?可能没有问题lem如果您对数据有把握,但要小心已经超过所需行数的数据文件——while循环将是无限的。(比较
      (r--)-NR>0可能更好)如果您对数据有把握,这可能不是问题,但是要小心数据文件的行数已经超过了所需的行数——while循环将是无限的。(比较
      (r-)-NR>0可能更好)