如果某些条件匹配,如何打印所有行。
示例:
echo "$ip"
this is a sample line
another line
one more
last one
如果此文件超过3行,则打印整个变量。
I am tried:
echo $ip| awk 'NR==4'
last one
echo $ip|awk 'NR>3{print}'
last one
echo $ip|awk 'NR==12{} {print}'
this is a sample line
another line
one more
last one
echo $ip| awk 'END{x=NR} x>4{print}'
需要实现这一目标:
如果此文件超过3行,则打印整个文件。我可以使用wc
和bash
执行此操作,但需要一个班轮。
答案 0 :(得分:3)
正确的方法(没有回声,没有管道,没有循环等):
$ awk -v ip="$ip" 'BEGIN{if (gsub(RS,"&",ip)>2) print ip}'
this is a sample line
another line
one more
last one
答案 1 :(得分:2)
您可以按照以下方式使用Awk
,
echo "$ip" | awk '{a[$0]; next}END{ if (NR>3) { for(i in a) print i }}'
one more
another line
this is a sample line
last one
您还可以从3
变量
awk
echo "$ip" | awk -v count=3 '{a[$0]; next}END{ if (NR>count) { for(i in a) print i }}'
我们的想法是在处理每一行时将每行的内容存储在{a[$0]; next}
中,到达END
子句时,NR
变量将具有该行你拥有的字符串/文件的数量。如果条件匹配,则打印行,即大于 3
的行数或使用的任何可配置值。
并且始终记得在bash
中引用变量以避免在shell中进行单词分割。
使用下面的James Brown's有用评论来保留行的顺序,请执行
echo "$ip" | awk -v count=3 '{a[NR]=$0; next}END{if(NR>3)for(i=1;i<=NR;i++)print a[i]}'
this is a sample line
another line
one more
last one
答案 2 :(得分:1)
awk中的另一个人。第一个测试文件:
$ cat 3
1
2
3
$ cat 4
1
2
3
4
代码:
$ awk 'NR<4{b=b (NR==1?"":ORS)$0;next} b{print b;b=""}1' 3 # look ma, no lines
[this line left intentionally blank. no wait!]
$ awk 'NR<4{b=b (NR==1?"":ORS)$0;next} b{print b;b=""}1' 4
1
2
3
4
说明:
NR<4 { # for tghe first 3 records
b=b (NR==1?"":ORS) $0 # buffer them to b with ORS delimiter
next # proceed to next record
}
b { # if buffer has records, ie. NR>=4
print b # output buffer
b="" # and reset it
}1 # print all records after that