在bash中过滤文本文件中的数据

时间:2014-03-17 23:38:09

标签: bash awk

我正在尝试过滤文本文件中的数据。文本文件中有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

2 个答案:

答案 0 :(得分:3)

<强>尝试:

awk -v ldate='20140101' '{split($2,fld,/_/); if(fld[1]<=ldate) print $1,$2}' file

注意:

  • 我们正在使用split函数,该函数基本上基于作为第三个元素提供的regex来拆分字段,并将字段存储在定义为第二个元素的数组中。
  • 除非输入文件为-F'\t,否则您不需要设置tab-delimitedFS的默认值为空格,因此将其定义为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