基于字符串中特定位置的命中使用 awk 进行提取

Extraction with awk based on position-specific hit in a string

我有一个大的 txt 文件,看起来像这样(制表符分隔):

147 186741 2S74M -162
147 647172 1S75M -221
163 584665 74M2S 271
147 658416 5S65M6S -272

我希望 awk 查看第 3 列,并在它在第 2 或第 3 个位置遇到字符 "S" 时提取整行。或者,丢弃字符 "S" 位于该字符串最后位置的所有行。

提前谢谢你, TP

awk ' ~ /S$/ {next}  ~ /^..?S/' file

第一部分跳过 S 是第三个字段的最后一个字符的行。
下一部分打印当 S 是第二个或第三个字符时的行。

awk方法:

awk '~/^.(S|.S).*[^S]$/' file

输出:

147 186741 2S74M -162
147 647172 1S75M -221

您只需要:

awk ' !~ /S$/' file