次のデータを含むテキストファイルを読み取ろうとします。
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
タイトルも印刷できます。
awk
GNU以外のシステムでは、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 ' '
。