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

时间:2017-08-23 19:50:56

标签: awk substr

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

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

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

提前谢谢你, TP

4 个答案:

答案 0 :(得分:1)

awk 方法:

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

输出:

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

你需要的只是:

html {
   background: url(images/aurora.jpg) no-repeat center center fixed;
   -webkit-background-size: contain;
   -moz-background-size: contain;
   -o-background-size: contain;
   background-size: contain;
}

答案 3 :(得分:0)

在这里再尝试一下awk。

awk '(substr($3,2,1)=="S" || substr($3,3,1)=="S") && substr($3,length($3))!="S"'  Input_file