我正在尝试过滤文本文件中的数据。文本文件中有2个字段。第一个是文本,第二个是由_分开的3个部分。第二个文件的第一部分是yyyyMMdd格式的日期,接下来的两个是字符串:
xyz yyyyMMdd_abc_lmn
现在我想根据第二个字段中的日期过滤文件中的行。我已经提出了以下awk命令,但它似乎不起作用,因为它输出整个文件肯定我错过了什么。
Awk命令:
awk -F'\t' -v ldate='20140101' '{cdate=substr($2, 1, 8); if( cdate <= ldate) {print $1'\t\t'$2}}' label
答案 0 :(得分:3)
<强>尝试:强>
awk -v ldate='20140101' '{split($2,fld,/_/); if(fld[1]<=ldate) print $1,$2}' file
注意:强>
split
函数,该函数基本上基于作为第三个元素提供的regex
来拆分字段,并将字段存储在定义为第二个元素的数组中。 -F'\t
,否则您不需要设置tab-delimited
。 FS
的默认值为空格,因此将其定义为tab
可能会在解释$2
时将其抛弃。 要使用两个标签输出,您可以将OFS
变量设置为:
awk -F'\t' -v OFS='\t\t' -v ldate='20140101' '{split($2,fld,/_/); if(fld[1]<=ldate) print $1,$2}' file
答案 1 :(得分:1)
试试这个:
awk -v ldate='20140101' 'substr($NF,1,8) <= ldate' label