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
正确方向的任何步骤都将是有益的!!
答案 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}
将按照正确的顺序打印前两行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)
可能对您有帮助,我使用awk
和start
变量来获取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