
我有一個文件,其中包含帶有各種字母數字字串的行,這些字串以空格-破折號-空格分隔。但是,有些行僅存在一個字母數字值和分隔符,但缺少另一個字串值。例子:
MN_L_DAX-NORDNET_D36 - DK0060975886
MN_L_DAX-NORDNET_D35 - DK0060975613
DK0060056323-DKK -
DK0060186294-DKK -
上面範例中的最後兩行在分隔符號的右側缺少字母數字字串,我想刪除它們。我嘗試使用以下 awk 表達式:
awk '!/* - /' sourcefile.txt > temp.txt && mv temp.txt sourcefile.txt
我的!/* - /
意思是“查找在任何字元(*)之後有一個空格-破折號-空格(-)並且之後沒有任何內容的模式,如果沒有找到這樣的模式(!)”,則將其餘行移至臨時。 txt 文件,並將sourcefile.txt 內容替換為temp.txt 內容。但是,當我運行上面的 awk 腳本時,sourcefile.txt 內容沒有任何反應 - 一切都保持不變。我也沒有收到任何錯誤。這裡可能出了什麼問題?鑑於上述範例行,運行 awk 腳本後所需的輸出應如下所示:
MN_L_DAX-NORDNET_D36 - DK0060975886
MN_L_DAX-NORDNET_D35 - DK0060975613
答案1
列印以字母數字字元結尾的行很簡單:
$ awk '/[[:alnum:]]$/' file
MN_L_DAX-NORDNET_D36 - DK0060975886
MN_L_DAX-NORDNET_D35 - DK0060975613
答案2
更簡單:
awk '$3' inputfile
這是 的簡寫awk '$3!=""'
,這是 的簡寫awk '$3!=""{print}'
,這是 的簡寫awk '$3!=""{print $0}'
作為記錄:
sed /-$/d
可能更快,grep -ve '-$'
甚至更快。
答案3
感謝@guillermo chamorro的建議,我能夠透過以下方式修改我的腳本來實現所需的輸出:
awk '!/^.* -$/' sourcefile.txt > temp.txt && mv temp.txt sourcefile.txt
謝謝吉列爾莫。