【问题标题】:Delete lines with lower/higher ISO date using awk and/or sed使用 awk 和/或 sed 删除具有较低/较高 ISO 日期的行
【发布时间】:2014-04-13 20:52:15
【问题描述】:

我有以下文件:

DATA;ORA;TESTO log;AMBIENTE;JOBNAME;NOMEAPP;NOMESCRIPT;PARAMETRI;
20130216;17-02-2014;15:15:13;Devi valorizzare la variabile AMBIENTE con "BCOLL" o "BPROD" ;;
20130427;17-02-2014;15:15:13;Devi valorizzare la variabile AMBIENTE con "BCOLL" o "BPROD" ;;
20131010;17-02-2014;15:15:13;Devi valorizzare la variabile AMBIENTE con "BCOLL" o "BPROD" ;;
20130217;17-02-2014;15:15:13;Devi valorizzare la variabile AMBIENTE con "BCOLL" o "BPROD" ;;
20130217;17-02-2014;15:15:13;Devi valorizzare la variabile AMBIENTE con "BCOLL" o "BPROD" ;;
20130217;17-02-2014;15:15:13;Devi valorizzare la variabile AMBIENTE con "BCOLL" o "BPROD" ;;
20140217;17-02-2014;15:15:13;Devi valorizzare la variabile AMBIENTE con "BCOLL" o "BPROD" ;;

第一行是ISO格式的日期,每行递增。

我想只使用一行带有 grep 或 awk 或 sed 的 shell 脚本来剪切所有早于给定日期的行。

注意带有描述字段的标题。

与 AIX、Linux、Solaris 兼容很重要,所以不要使用 sed -i。

我有这个命令可以提取一些行,但也可以提取第一行。

awk -F ";" '$1 < 20140101 {print $1}' log.csv

与另一个 | awk '!/$1/' log.csv 管道连接它不起作用,可能是因为有多条线路。

使用 sed 管道也不起作用:

sed '/$1/ d' < log.csv

但这个也行不通:

for i in awk -F ";" '$1 < 20140101 {print $1}' log.csv; do awk '!/$i/' log.csv; done

【问题讨论】:

    标签: awk sed pipe ksh


    【解决方案1】:

    NR==1 在awk 中的第一行为真。剩下的就用比较吧

    awk -F\; 'NR==1 || $1 < 20140101 { print }'
    

    【讨论】:

    • 您在我输入答案时发布了此信息。标题行中的第一个单词将大于任何整数,因此NR==1 在功能上不是必需的,尽管它具有更明确的优点。
    • @Emmet:如果标题更改为其他内容,它也会起作用:)
    • 这只是一个功能优势,如果标题更改为也意味着“日期”但数字的东西,这似乎不太可能:)
    【解决方案2】:

    这对我有用:

    awk -F';' '$1>=20140101 {print}' log.csv
    

    幸运的是,ISO 日期可以正确比较为整数。

    【讨论】:

    • 谢谢大家。几分钟前我找到了像你这样的解决方案:awk -F ";" '$1 &gt; 20130217' &lt; log.csv &gt; log.tmp &amp;&amp; mv log.tmp log.csv
    【解决方案3】:
    sed -n "1 p;/^20140101/,$ p" log.csv
    

    如果你想用 sed 更改文件并兼容每个环境,你需要使用一个临时文件,仍然在 1 行 shell 上,但上面有很多指令

    sed -n "1 p;/^20140101/,$ p" log.csv >/tmp/log.csv;mv /tmp/log.csv log.csv
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-27
      • 2012-01-01
      • 1970-01-01
      相关资源
      最近更新 更多