我正在使用 SAC 工具讀取標頭資訊,但有些檔案沒有標頭資訊,并且會列印錯誤。如果檔案在作業期間沒有標題或錯誤,有什么方法可以使用 AWK 列印這些檔案。我經常使用 AWK 進行資料操作,但這次失敗了。
這是我的嘗試:
saclst a f *2020-05*BHZ*
這是輸出
GS.GS043.2020-05-18T03:52.BHZ.sac 3.37
GS.GS043.2020-05-18T09:28.BHZ.sac 3.64
GS.GS043.2020-05-18T12:09.BHZ.sac 3.42
saclst: Error determining SAC header: GS.GS043.2020-05-18T14:36.BHZ.sac
GS.GS043.2020-05-18T16:25.BHZ.sac 2.92
GS.GS043.2020-05-18T18:51.BHZ.sac 3.66
現在我想獲取檔案名并列印它,但似乎 AWK 沒有幫助;
saclst a f *2020-05*BHZ* | awk '{if ($2<0) print $1;}' > ../test.dat
我的輸出檔案為空,終端顯示此錯誤:
有什么辦法可以保存這個錯誤,以便我以后修改它?
saclst: Error determining SAC header: SC.LZB.2020-05-21T10:46.BHZ.sac
saclst: Error determining SAC header: SC.LZB.2020-05-21T11:57.BHZ.sac
saclst: Error determining SAC header: SC.LZB.2020-05-26T11:23.BHZ.sac
saclst: Error determining SAC header: SC.LZB.2020-05-28T10:44.BHZ.sac
saclst: Error determining SAC header: SC.QSC.2020-05-12T06:49.BHZ.sac
uj5u.com熱心網友回復:
這就是我認為您正在尋找的內容:
# just for demo, pipe SAC tool to awk for your actual use case
$ cat ip.txt
GS.GS043.2020-05-18T03:52.BHZ.sac 3.37
GS.GS043.2020-05-18T09:28.BHZ.sac 3.64
GS.GS043.2020-05-18T12:09.BHZ.sac 3.42
saclst: Error determining SAC header: GS.GS043.2020-05-18T14:36.BHZ.sac
GS.GS043.2020-05-18T16:25.BHZ.sac 2.92
GS.GS043.2020-05-18T18:51.BHZ.sac 3.66
# filter lines with Error based on number of fields or `Error` in 2nd field
$ awk 'NF != 2' ip.txt
saclst: Error determining SAC header: GS.GS043.2020-05-18T14:36.BHZ.sac
$ awk '$2 == "Error"' ip.txt
saclst: Error determining SAC header: GS.GS043.2020-05-18T14:36.BHZ.sac
# print only last field
$ awk '$2 == "Error"{print $NF}' ip.txt
GS.GS043.2020-05-18T14:36.BHZ.sac
如果該saclst命令將這些行Error放在 on 上stderr,您可以使用以下命令:
$ saclst a f *2020-05*BHZ* 2> error.log
uj5u.com熱心網友回復:
雖然awk(你問的)有效,
sed -n 's/.*Error.*:/ /p' ip.txt
也可以正常作業。和
grep Error ip.txt
所以,不要只專注于使用awk.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/441505.html
