AWK输出到分隔字符串
以下AWK输出到分隔字符串,awk,gawk,Awk,Gawk,以下 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
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
输出:
2017-01-11 07:19 -0.81 feet Low Tide
2017-01-12 08:03 -0.81 feet Low Tide
如何在一行中输出结果(本例中为两行),如下所示:
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
甚至更短:
awk '/-0.81/{a=!a ? $0 : a", "$0} END{print a}' fullYearData.txt
将匹配行追加到变量(a
)并在末尾
打印变量a
。最初a
将为零,而if else
检查用于确定何时需要添加,
(即不是第一次,而是为后续模式匹配行添加,
。另一个awk解决方案
awk 'BEGIN{old_ORS=ORS;ORS=", "}/-0.81/{print}END{ORS=old_ORS;print}' fullYearData.txt
缓冲输出到
b
并在结束时打印:
$ awk '/-0.81/{b=b (b==""?"":", ") $0}END{print b}' file
2017-01-11 07:19 -0.81 feet Low Tide, 2017-01-12 08:03 -0.81 feet Low Tide
另一个选项是引入字段分隔符变量f
,该变量在第一次匹配后设置
awk '/-0.81/{s=s f $0; f=", "} END{print s}' fullYearData.txt
最初,两个变量s
和f
都将包含空字符串(“”)。只需打印不带CR/LF的筛选行(第一次出现后,最困难的部分是“,”)
printf
中的\n
不必要地将awk
绑定到特定的实现,因为不同的发行版处理转义序列的方式不同。print a
在这里就足够了,可以成为更一般的解决方案。您不必在模式中转义-
,因为它没有特殊的平均值除在[a-c]