我怎么知道在bash中首先使用awk发生了哪个分隔符?
如何使用单个awk行首先知道哪个分隔符已经发生.
假设我有一个包含内容的文件: AB BC DE BC DE AB DE BC AB 而且我想知道在每一行中,DE,AB,BC中的哪一个首先发生了. 我以为我可以使用分隔符BC然后取第一个字段然后BC,然后取AB的第一个字段. 这可以通过以下方式完成: $awk -F'AB' '{print $1}' <file> | awk -F'BC' '{print $1}' <file> | awk -F'DE' '{print $1}' <file> 但是,有没有其他方法可以动态更改awk行中的分隔符并使用awk只完成一次上面的事情? 编辑:
首先,如果您的文件仅包含AB,BC或DE组合以及换行符,那么答案很简单:
awk '{print $1}' file 这符合你的榜样.尽管如此,我不相信这种情况. 然而,从纯粹的教育角度来看,这里提出了一种不同的awk方法. 如果要在一行中找到“第一个”分隔符,可以从不同的角度解决问题.您可以将其理解为一组记录,而不是将该行解释为一组列.这带来的问题是“首先找到了哪个记录分隔符:
对于单行字符,您可以执行以下操作: $echo "AB BC DE BC DE AB DE BC AB" | awk 'BEGIN{RS="DE|AB|BC"}{print RT;exit }' AB 现在可以更多地使用这个想法了.在换行符和请求的集合之间不断切换RS.这只是为了展示awk的灵活性. $awk 'BEGIN{RSSET="DE|AB|BC";RS=RSSET} (RS=="n"){RS=RSSET;next} {print RT; RS="n"; next}' file 如果是文件 AB BC DE BC DE AB DE BC AB BC DE AB DE BC AB DE AB DE BC AB 它输出 AB BC DE (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |