我有一个日志文件,看起来像下面。它显示有许多文件丢失。我想列出它。
$cat datafile.txt
/data/kay/20091012.csv
gawk: cmd. line:4: (FILENAME=/data/kay/out/501_20091013.txt FNR=1) fatal: file not file
/data/kay/20091014.csv
gawk: cmd. line:4: (FILENAME=/data/kay/out/501_20091015.txt FNR=1) fatal: file not file
gawk: cmd. line:4: (FILENAME=/data/kay/out/501_20091016.txt FNR=1) fatal: file not file
/data/kay/20091017.csv
gawk: cmd. line:4: (FILENAME=/data/kay/out/501_20091018.txt FNR=1) fatal: file not file
字符串
我想列出文件丢失的日期。我的脚本在下面:
$script.sh
awk '{if($1 -eq "gawk")print $4}' datafile.txt
echo ${echo $(awk '{if($1 -eq "gawk")print $4}' datafile.txt):-14,8}
型
显示错误。“替换错误”
我的愿望输出:
$outfile.txt
20091013
20091015
20091016
20091018
型
5条答案
按热度按时间6ovsh4lw1#
使用
sed
字符串
使用
awk
型
m3eecexj2#
使用
grep
:字符串
pexxcrt23#
使用GNU
grep
和您显示的示例,请尝试以下解决方案。在grep的regex中使用regex和lazy match概念。字符串
ajsxfq5m4#
设
datafile.txt
内容为字符串
通过做
型
您指示您的
awk
从第一个字段推导出eq
,然后将其与gawk
连接,因为所有这些字段都是非数字的,并且eq
未设置0
,对于计算为型
这是考虑在布尔上下文中的真实性,所以它将为每行
print
第4个字段(如果没有这样的字段,则为空字符串)。如果需要比较,应该使用
==
,并考虑到您正在查找第一个字段为gawk:
的行,在修复代码后将变为型
并给出输出
型
然而,这里不需要
if
,因为GNUAWK
使用模式-动作对,所以上面的可能表示为型
现在你需要清理输出,我建议使用以下启发式方法:在
_
之后和.
之前保留一个或多个数字,可以使用gensub
function实现,如下所示型
这给了
型
注意,
[.]
表示文字点,而方括号外的.
表示任何字符。pepwfjgg5#
基本结构
ERE
regex
就足够了:进一步缩小
regex
到 * 绝对 * 最小值:型
还有一个非常非常不合适的方法来提取这个数字:
的字符串