使用awk命令向后显示行

时间:2018-02-08 22:46:50

标签: awk

awk命令相当新,还在玩它,我试图显示一行文件的多行,比如第3-5行,然后向后显示。所以使用给定的文件:

Hello World
How are you
I love computer science,
I am using awk,
And it is hard.

它应输出:

science, computer love I
awk, using am I
hard.  is it And

正确方向的任何步骤都将是有益的!!

3 个答案:

答案 0 :(得分:2)

您可以使用以下awk命令来实现目标:

<强>输入

$ cat text 
Hello World
How are you
I love computer science,
I am using awk,
And it is hard.

<强>输出:

$ awk 'NR<3{print}NR>=3{for(i=0; i<NF; i++){printf "%s ",$(NF-i);} printf "\n";}' text                                                            
Hello World
How are you
science, computer love I 
awk, using am I 
hard. is it And

<强>说明:

  • NR<3{print}将按照正确的顺序打印前两行
  • 来自第3行的
  • NR>=3{for(i=0; i<NF; i++){printf $(NF-i)" ";} printf "\n";}'您在NF标识的所有字段上都有一个循环,并且您从最后一行到第一行依次打印它们($NF是最后一个$1是第一个)并且您用空格分隔每个字段。最后但并非最不重要的是在你打印循环和EOL char之后。

现在,如果您不需要打印前两行,请使用:

$ awk 'NR>=3{for(i=0; i<NF; i++){printf "%s ",$(NF-i);} printf "\n";}' text                                                            
science, computer love I 
awk, using am I 
hard. is it And

对于包含更多行的文件,您只想打印范围(3-5),请使用:

$ awk 'NR>=3 && NR<=5{for(i=0; i<NF; i++){printf "%s ",$(NF-i);} printf "\n";}' text

答案 1 :(得分:2)

关注X <- circleUnif(n=30) 可能对您有帮助,我使用awkstart变量来获取OP需要打印的那些行。

end

输出如下。

awk -v start=3 -v end=5 'FNR>=start && FNR<=end{for(;NF>0;NF--){printf("%s%s",$NF,NF==1?RS:FS)}}'   Input_file

说明: 现在也向解决方案添加说明。

science, computer love I
awk, using am I
hard. is it And

答案 2 :(得分:2)

$ cat tst.awk
NR>2 && NR<6 {
    for (i=NF; i>0; i--) {
        printf "%s%s", $i, (i>1?OFS:ORS)
    }
}

$ awk -f tst.awk file
science, computer love I
awk, using am I
hard. is it And