6年間(2011-2016)のデータを含むテキストファイルがあります。 6年間すべての4月と5月のデータのみを抽出します。
@STATION_ID,LATITUDE,LONGITUDE,TIME(GMT),DATE(GMT),AIR_TEMP(°C)
IMDE1611_14164B(PITAMPURA),28.7,77.15,0,08/09/2011,33.5
IMDE1611_14164B(PITAMPURA),28.7,77.15,1,08/09/2011,33.3
IMDE1611_14164B(PITAMPURA),28.7,77.15,2,08/09/2011,33.8
IMDE1611_14164B(PITAMPURA),28.7,77.15,3,08/09/2011,33.8
IMDE1611_14164B(PITAMPURA),28.7,77.15,4,08/09/2011,34.5
IMDE1611_14164B(PITAMPURA),28.7,77.15,5,08/09/2011,35.0
IMDE1611_14164B(PITAMPURA),28.7,77.15,6,08/09/2011,34.9
IMDE1611_14164B(PITAMPURA),28.7,77.15,7,08/09/2011,35.4
grep
およびsed
コマンドを使用してデータをフィルター処理していますが、必要な結果が表示されていません。私はこれらのコマンドを使用しています:
grep "??-0[4-5]-????" filename.txt > filename.csv
sed -n '/2016-04-01/,/2016-04-30/{/2016-04-30/d; p}' my_delhi.txt
sed -n '/2016-04-01/,/2016-04-30/p' my_delhi.txt
ファイルでは、日付形式は実際にはdd/mm/yyyy
またはmm/dd/yyyy
のように見えますが、コマンドではdd-mm-yyyy
またはyyyy-mm-dd
であると想定しています。
この式でmm/dd/yyyy
であると仮定すると、grep
4月と5月の行ができるはずです。
grep -E '(04|05)/[0-9]+/[0-9]+' file
dd/mm/yyyy
の場合、次を使用できます。
grep -E '[0-9]+/(04|05)/[0-9]+' file
ファイルサンプルに基づいて、これらは十分具体的である必要があります。
-E
拡張正規表現を使用(04|05)
一致04
または05
[0-9]+
少なくとも1桁(もちろん、ここでは正確な日付のフォーマットについてより厳密にすることができます。たとえば、1日は[0-3][0-9]
、1年は20[0-1][0-9]
ですが、この場合は必要になります)/
の代わりに、sed
の区切り文字として何か他のものを使用できます。
sed -n '\:08/09/2011:p' file
または、正規表現と区切り文字として「#」を使用:
sed -nr "\#,[0-9]{2}/[0-9]{2}/[0-9]{4},#p" file
4月と5月のみ(dd/mm/yyyy):
sed -nr "\#,[0-9]{2}/0[45]{1}/[0-9]{4},#p" file
または(mm/dd/yyy):
sed -nr "\#,0[45]{1}/[0-9]{2}/[0-9]{4},#p" file
$ Perl -F'/,/' -ane 'print if $F[4]=~/^(04|05)/' input.txt
IMDE1611_14164B(PITAMPURA),28.7,77.15,2,04/09/2011,33.8
IMDE1611_14164B(PITAMPURA),28.7,77.15,3,05/09/2011,33.8
ここで起こることは、列の区切り文字としてカンマを使用し、4番目の列(日付)が04または05で始まる場合にのみ印刷することです。これは OPのコメント と一貫しています。
...日付の形式はmm:dd:yyyyです。