AWKは日付を確認し、今日の場合はそのコンテンツのみをフィルタリングします。

AWKは日付を確認し、今日の場合はそのコンテンツのみをフィルタリングします。

次のデータを含むテキストファイルを読み取ろうとします。

LNAME FNAME MNAME MAJOR DATE
Smith Jane Chem  Date:[somedate]
Doe Joanne Victoria ENG Date:[today]

この例では、[somedate]は今日を除くすべての日付を意味し、[today]は今日の日付を意味します。私の考えは、awkを使用して今日登録されているすべての学生をフィルタリングすることです。日付形式は2022-06-21です。

どんな助けでも大変感謝します。

ベストアンサー1

grep -v "Date:$(date +%F)\$" < file

Date:YYYY-MM-DD形式で終わらない現在の日付の行が返されます。

を使用すると、zsh以下を呼び出すことなくこれを行うことができますdate

grep -v Date:${(%):-%D{%F}}$ < file

GNU実装はawk現在の日付自体を取得することもできます。

gawk 'BEGIN {search = strftime("Date:%F")}
      $NF != search' < file

スペースで区切られた最後のフィールドではなく行を返しますDate:[today]

に変更:

gawk 'BEGIN {search = strftime("Date:%F")}
      NR == 1 || $NF != search' < file

タイトルも印刷できます。

awkGNU以外のシステムでは、awk次のことができます。

awk -v search="$(date +Date:%F)" '
  NR == 1 || $NF != search' < file

または:

awk 'BEGIN {"date +Date:%F" | getline search}
     NR == 1 || $NF != search' < file

(この方法はシェルコードを解釈するために追加のシェル呼び出しを実行しますが、date +Date:%Fこの方法はスクリプトでのみ役立ちます#! /usr/bin/awk -f。)

入力をスペースを区切り文字として使用してcsvの種類に解析できる場合は、csvkitの次のものを使用することもできますcsvgrep

<file csvgrep -d ' ' -c DATE -r "$(date +'^Date:%F$')"

ここのシーンで試合がありますDATE

ただし、出力はカンマ区切りの値です。パイプを使用すると、区切り文字をカンマではなく空白に戻すことができますcsvformat -D ' '

おすすめ記事