具有已知特定长度的字母数字字符串的文件,但数字的位置不同:
Z2aO9p6u8
4s5yI7H89
e0Dt14g67
3fR46i7I8
R2c0X346d
4U45v7gD9
此处所需的输出:
4s5yI7H89
e0Dt14g67
3fR46i7I8
您需要选择其中 N 是位数的行(在示例中我们取 5),并且仅选择其中每个后续数字的值大于前一个数字的行。我把这个工作构建放在一起:
cat file | grep -e '\([[:digit:]].*\)\{5\}' | while read line; do echo $line | sed 's/[[:alpha:]]*//g' | sed 's/./&:/g;s/$/'"${line}"'/' | awk -F":" '{if ($1 > $2 && $2 > $3 && $3 > $4 && $4 > $5) print$NF}' >> outfile; done
我想摆脱循环,但无法将删除字母应用于某个字段:
cat file | grep -e '\([[:digit:]].*\)\{5\}' | awk '{print$0":"$0}' | **sed 's/^[^:]*[[:alpha:]]//g'** ...
顺便从e0Dt14g67:e0Dt14g67
sed和awk的帮助下怎么弄01467:e0Dt14g67
?
上述完整的构造工作,但我想没有循环,不那么麻烦,更快,最好还是,可能 awk 在这里更合适,但 sed 也很有用。谢谢你。