linux awk查找数字
时间: 2023-10-20 07:28:44 浏览: 39
可以使用awk命令的正则表达式来查找数字。例如,要查找一个文件中所有的数字,可以使用以下命令:
```
awk '{ for(i=1;i<=NF;i++) if($i~/^[0-9]+$/) print $i }' filename
```
解释一下这个命令:
- `awk`:命令名称。
- `'{ for(i=1;i<=NF;i++) if($i~/^[0-9]+$/) print $i }'`:命令参数,遍历每个字段,如果该字段是一个数字,则输出该数字。
- `filename`:要查找数字的文件名。
这个命令会输出文件中所有的数字,每个数字一行。
相关问题
Linux用awk和grep写出一个命令,该命令要找出数字长度不是10位数的电话号码,并打印出错误的手机号码
可以使用以下命令:
```
grep -Eo '\b[0-9]{1,9}\b|\b[0-9]{11,}\b' file.txt | awk '{print}'
```
其中,`file.txt` 是包含电话号码的文件名,可以替换为相应的文件名。
命令解释:
- `grep -Eo '\b[0-9]{1,9}\b|\b[0-9]{11,}\b' file.txt` 用于在文件中查找符合条件的电话号码,其中:
- `-E` 表示启用正则表达式匹配;
- `-o` 表示只输出匹配的部分;
- `'\b[0-9]{1,9}\b|\b[0-9]{11,}\b'` 是一个正则表达式,用于匹配不是10位数的电话号码。其中 `\b` 表示单词边界, `[0-9]{1,9}` 表示匹配1到9位数的数字,`|` 表示或, `[0-9]{11,}` 表示匹配11位及以上的数字。
- `awk '{print}'` 用于将输出结果打印出来。
执行该命令后,会输出长度不是10位的电话号码。
Linux用awk和grep写出一个命令,该命令要找出最后一项数字长度不是10位数的电话号码,并将错误的手机号码打印出来
可以使用 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"。