我有一个文件,其中包含带有各种字母数字字符串的行,这些字符串以空格-破折号-空格分隔。但是,有些行仅存在一个字母数字值和分隔符,但缺少另一个字符串值。例子:
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
谢谢吉列尔莫。