我找不到使用bash有条件地删除文件中的行的解决方案。该文件包含字符串中的年份日期,并且仅当年份低于参考值时才应删除相应的行。
该文件如下所示:
'zg_Amon_MPI-ESM-LR_historical_r1i1p1_196001-196912.nc' 'MD5'
'zg_Amon_MPI-ESM-LR_historical_r1i1p1_197001-197912.nc' 'MD5'
'zg_Amon_MPI-ESM-LR_historical_r1i1p1_198001-198912.nc' 'MD5'
'zg_Amon_MPI-ESM-LR_historical_r1i1p1_199001-199912.nc' 'MD5'
'zg_Amon_MPI-ESM-LR_historical_r1i1p1_200001-200512.nc' 'MD5'
我希望从第1行获得1969年并将其与参考(例如1980年)进行比较,如果年份低于参考,则删除整行。这意味着在这种情况下代码应该删除文件的前两行。
我尝试使用sed和grep,但无法使其正常工作。
提前感谢任何想法。
答案 0 :(得分:2)
您可以使用awk
:
awk -F- '$4 > 198000 {print}' filename
这将输出第二个日期晚于31/12/1979的所有行。这不会就地编辑文件,你必须将输出保存到另一个文件,然后移动它来代替原始文件:
awk -F- '$4 > 198000 {print}' filename > tmp && mv tmp filename
使用sed
(将就地编辑):
sed -i '/.*19[0-7][0-9]..\.nc/d' filename
这需要多一点思考,因为你需要构建一个正则表达式来匹配你不想要显示的任何值。
答案 1 :(得分:1)
也许是这样的:
awk -F- '{ if (substr($4,1,4) >= 1980) print }' input.txt