Linux用awk和grep写出一个命令,该命令要找出最后一项数字长度不是10位数的电话号码,并将错误的手机号码打印出来
时间: 2024-02-29 19:51:51 浏览: 144
可以使用 awk 和 grep 的组合来实现该命令,具体命令如下:
```bash
grep -Eo '^[^ ]+ [^ ]+ .* [^ ]{1,9}$' annuaire_sed.txt | awk '{print $NF, $0}' | sort -n | cut -d' ' -f2-
```
解释如下:
1. `grep -Eo '^[^ ]+ [^ ]+ .* [^ ]{1,9}$' annuaire_sed.txt`:使用 grep 命令查找最后一项数字长度不是10位数的电话号码,其中:
- `-E` 表示使用正则表达式;
- `-o` 表示只输出匹配到的部分;
- `'^[^ ]+ [^ ]+ .* [^ ]{1,9}$'` 表示匹配四列数据中最后一列长度为 1 到 9 的行;
- `annuaire_sed.txt` 表示要查找的文件名。
2. `awk '{print $NF, $0}'`:使用 awk 命令将文件中每行的最后一列和整行打印出来,其中:
- `$NF` 表示最后一列;
- `$0` 表示整个行。
3. `sort -n`:使用 sort 命令将最后一列的数字进行排序,其中 `-n` 表示按照数字大小排序。
4. `cut -d' ' -f2-`:使用 cut 命令将每行中第一个空格之后的内容打印出来,其中:
- `-d' '` 表示使用空格作为分隔符;
- `-f2-` 表示从第二个字段开始打印,直到最后一个字段。
这个命令会打印出最后一项数字长度不是10位数的电话号码,如果文件 annuaire_sed.txt 中有一行数据为 "张三 李四 010-1234567 123",则会输出:"123 张三 李四 010-1234567 123"。
阅读全文