ファイルには1つの列しかありません。
fs://derps123/20210103/
fs://derps123/20210104/
fs://derps123/20210105/
fs://derps123/20210106/
fs://derps123/20210107/
fs://derps123/20210108/
fs://derps123/20210109/
20210105
との間の行をフィルタリングしたいです。20210108
awkを使用してフィルタリングしようとしましたが、date
構文エラーが発生します。
awk -v date='gs://derps123/''$1!=date{next};/20210105/,/20210108/' folders.txt
答え1
-v
オプション値と awk プログラムの間にスペースがないため、構文エラーが発生します。
日付は次のように数値で処理できます。
$ awk -v low=20210105 -v high=20210108 -v FS='/' '$4 >= low && $4 <= high' folders.txt
fs://derps123/20210105/
fs://derps123/20210106/
fs://derps123/20210107/
fs://derps123/20210108/
答え2
sedを使用してこれを実行できます。
sed -n '/20210105/,/20210108/p' folders.txt
答え3
awk
まったくそうする必要はありません。grep
十分です:
grep '2021010[5-8]' you_data
ファイルが日付でソートされていない場合でも機能します。
しかし、以下を使用したい場合awk
:
awk -F/ -v r=2021010[5-8] '$(NF-1) ~ r' your_data
答え4
awk -F "/" '$(NF-1)>=20210105 && $(NF-1)<=20210108' filename
fs://derps123/20210105/
fs://derps123/20210106/
fs://derps123/20210107/
fs://derps123/20210108/