【问题标题】:remove a specific month-day (leapyear day, to be exact. ie: 02-29) from time series从时间序列中删除特定的月份(准确地说是闰年。即:02-29)
【发布时间】:2015-03-04 01:15:13
【问题描述】:

我想使用 awk(尽管对 python/pandas 解决方案开放)将除特定日期之外的所有内容从时间序列数据集中提取出来。特定日期有时仅在整个文件中出现,因为它是闰年日,只有在闰年期间有记录时才会出现。

数据集如下所示,作为闰年实例发生位置的示例:

02-28   HammondBay  139 279 30  49.23281860 -123.96769714   4   5150    69.9
02-29   HammondBay  139 279 30  49.23281860 -123.96769714   1   1437    50.9
03-01   HammondBay  139 279 30  49.23281860 -123.96769714   4   5754    59.0
03-02   HammondBay  139 279 30  49.23281860 -123.96769714   4   5732    54.8
03-03   HammondBay  139 279 30  49.23281860 -123.96769714   4   5724    128.5

因此,为了明确起见,预期的结果是从这个制表符分隔的时间序列数据集中删除了一个包含 02-29 的每个实例的文件。

【问题讨论】:

    标签: python shell datetime pandas awk


    【解决方案1】:

    我在this site 发现了一些删除(或剥离)方法

    使用 awk 解决上述问题的方法是:

    awk '!/02-29/' file > temp && mv temp.whatever file
    

    【讨论】:

      【解决方案2】:
      awk '!/02-29/' your_file.txt | tee new_file.txt
      

      grep怎么样:

      grep -Ev '02-29' your_file.txt > new_file.txt
      

      【讨论】:

      • 很好地使用 grep。我喜欢反向匹配方法。感谢您提供不同的方法!顺便说一句,“tee”基本上就像使用 > 命令吗?如果是这样,是不是更有效?
      • 谢谢。使用 > 将 prog 输出重定向到文件。使用管道 (|) 向程序 tee 提供输入,该程序会保存到文件并显示在屏幕上。 'Tee' 就像在 'T 连接' - 这里我拆分 awk 的输出以显示和保存。
      • 很好的解释。我将在几分钟后发布另一个问题,我认为您会有解决方案,敬请期待:)
      • 感谢您的提示。鞋子投票的事情是双向的吗? ;)
      【解决方案3】:

      要删除所有以02-29 前缀就地 开头的行,您可以使用sed -i:

      $ sed -i '/^02-29/d' input.txt 
      

      或者使用grep + sponge:

      $ grep -v '^02-29' input.txt | sponge input.txt
      

      moreutils 中的 sponge 实用程序允许覆盖管道中用作输入的文件。

      【讨论】:

        猜你喜欢
        • 2016-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-24
        • 1970-01-01
        • 1970-01-01
        • 2021-10-09
        • 2018-12-02
        相关资源
        最近更新 更多