以下
awk/\-0.81/ { print $0 }' fullYearData.txt
成功找到
的实例 -0.81
在很长的行列表中,如下所示:
2017-01-10 16:58 0.90 feet Low Tide
2017-01-10 22:54 2.10 feet High Tide
2017-01-11 07:19 -0.81 feet Low Tide
2017-01-11 14:15 1.06 feet High Tide
2017-01-11 17:48 0.89 feet Low Tide
2017-01-11 23:42 2.13 feet High Tide
2017-01-12 08:03 -0.81 feet Low Tide
2017-01-12 14:51 1.06 feet High Tide
输出:
2017-01-11 07:19 -0.81 feet Low Tide
2017-01-12 08:03 -0.81 feet Low Tide
如何在一行中设置输出结果(本例中为2行),如下所示:
2017-01-11 07:19 -0.81 feet Low Tide, 2017-01-12 08:03 -0.81 feet Low Tide
答案 0 :(得分:3)
另一种选择是引入在第一次匹配后设置的字段分隔符变量f
。
awk '/-0.81/{s=s f $0; f=", "} END{print s}' fullYearData.txt
最初,变量s
和f
都将包含空字符串("")。
答案 1 :(得分:2)
$ awk '/-0.81/{if(!a)a=$0; else a=a", "$0} END{print a}' fullYearData.txt
2017-01-11 07:19 -0.81 feet Low Tide, 2017-01-12 08:03 -0.81 feet Low Tide
甚至更短:
awk '/-0.81/{a=!a ? $0 : a", "$0} END{print a}' fullYearData.txt
将匹配的行追加到变量(a
),并在END
处打印变量a
。最初a
为零,if-else
检查用于决定何时需要添加,
(即不是第一次,但为后续模式添加,
匹配的行。
答案 2 :(得分:1)
另一个awk解决方案
awk 'BEGIN{old_ORS=ORS;ORS=", "}/-0.81/{print}END{ORS=old_ORS;print}' fullYearData.txt
答案 3 :(得分:1)
缓冲输出到Q
并打印在b
:
END
答案 4 :(得分:1)
只需打印没有CR / LF的过滤器线(首次出现后为“,”,这是最困难的部分)
awk '/-0.81/{printf( "%s%s", ! a++ ? "" : ", ", $0)}' YourFile
# with final new line if needed
awk '/-0.81/{printf( "%s%s", ! a++ ? "" : ", ", $0)}END{print}' YourFile