首页 > 试题广场 >

打印只有一个数字的行

[编程题]打印只有一个数字的行
  • 热度指数:13731 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
假设有一个nowcoder.txt,编写脚本,打印只有一个数字的行。

假设nowcoder.txt内容如下:
haha
1
2ab
cd
77
那么你的脚本应该输出
1
2ab

输入描述:
1


输出描述:
1
示例1

输入

haha
1
2ab
cd
77

输出

1
2ab
grep -Px '\D*\d\D*'

发表于 2025-05-08 13:25:49 回复(0)
# 方法1:使用while read line
while read -r line; do
    # 将每行的数字的过滤出来,并得出数量
    num=$(echo "${line}" | grep -o [0-9] | wc -l)
    # 如果数量不是1则continue
    [[ ${num} -ne 1 ]] && continue
    echo "$line"
done < nowcoder.txt

# 方法2: 使用awk
# 使用awk逐行遍历,在每行处理中逐个字符处理,
awk -F "" 'BEGIN{}{
    k=0;
    for(i=1;i<=NF;i++){
        if($i ~ /[0-9]/) {
            k++
        }
    }
    if(k==1) {
        print $0
    }
}END{}' nowcoder.txt

# 因为用不到BEGIN和END,则可以选择继续进化
awk -F "" '{
    k=0;
    for(i=1;i<=NF;i++){
        if($i ~ /[0-9]/) {
            k++
        }
    }
    if(k==1) {
        print $0
    }
}' nowcoder.txt

# 发现上面的复杂度还是挺高的,继续优化, 通过if(k>=2)降低遍历次数降低复杂度
awk -F "" '{
    k=0;
    for(i=1;i<=NF;i++){
        if($i ~ /[0-9]/) {
            k++
        }
        if(k>=2){
            next
        }
    }
    if(k==1) {
        print $0
    }
}' nowcoder.txt

发表于 2023-03-21 13:50:08 回复(0)
#!/bin/bash

while read -r line
do
sum=$(echo $line|grep -Eo '[0-9]'|wc -l)
if [ $sum -eq 1 ];then
echo $line
fi
done < nowcoder.txt
发表于 2023-02-08 16:31:16 回复(0)
grep -E '^[^0-9]*[0-9][^0-9]*$' nowcoder.txt

发表于 2023-01-28 23:58:08 回复(0)

whi

while read line;do n=`echo $line|sed 's/[a-z]//g'|wc -L`;if [ $n -eq 1 ];then echo $line;fi;done <nowcoder.txt
le read line;do n=`echo $line|sed 's/[a-z]//g'|wc -L`;if [ $n -eq 1 ];then echo $line;fi;done <nowcoder.txt
发表于 2022-11-07 22:49:37 回复(0)

gsub

awk '{str = $0; num = gsub(/[0-9]/, ""); if(num == 1){print str}}' nowcoder.txt
发表于 2022-08-27 21:18:44 回复(0)
grep '^[a-z]*[0-9][a-z]*$' ./nowcoder.txt
发表于 2022-08-18 18:00:58 回复(1)
awk -F "[0-9]" '{if(NF==2) print $0}' nowcoder.txt
##上面的代码很简洁,直接使用数字0-9作为字段分割符,再判定字段个数是否为2.
发表于 2022-08-03 15:51:48 回复(0)
grep [0-9] nowcoder.txt | grep -v [0-9].*[0-9]

发表于 2022-07-26 20:46:53 回复(0)

awk '/^[a-z][0-9][a-z]$/'

发表于 2022-07-17 11:45:17 回复(0)
awk -F "[1-9]" '{
    if (NF == 2){
        print $0
    }
}' nowcoder.txt
发表于 2022-07-13 10:15:27 回复(0)
awk -F [0-9] '{if(NF==2){print}}' nowcoder.txt
发表于 2022-07-09 17:22:48 回复(0)
awk '/^[a-zA-Z]*[0-9][a-zA-Z]*$/{print}' nowcoder.txt

发表于 2022-06-27 22:30:04 回复(0)
awk '{
    l0=length($0)
    gsub(/[0-9]/, "", 0)
    l1=length($0)
    if(l0-1==l1){
        print($0)
    }
}'
发表于 2022-06-26 19:47:00 回复(0)
grep -E '[0-9]{1}' nowcoder.txt|grep -E -v '[0-9]{2,}'
这样可以

为什么 grep -E '[0-9]{1}' nowcoder.txt 不可以?
发表于 2022-06-23 18:31:10 回复(0)
awk -F "" '{for(i=1;i<=NF;i++){if($i ~ /[0-9]/){a=a+1}}{print $0,a}{a=0}}'| awk -F " " '{if($2==1){print $1}}'
发表于 2022-05-24 17:53:41 回复(0)
grep -E '^[a-Z]*[0-9][a-Z]*$' nowcoder.txt

发表于 2022-05-19 14:08:24 回复(0)
awk '{a=$0}{gsub(/[0-9]/, "", $0)}{if(length(a)==length($0)+1) print a}'
发表于 2022-05-10 16:23:45 回复(0)
while read line; do
    out=${line//[^0-9]/}  # 进行字符串替换,去除非数字字符

    if [ ${#out} -eq 1 ]; then # 计算数字字符长度并输出
        echo $line 
    fi
done < nowcoder.txt
发表于 2022-04-26 15:53:27 回复(0)
awk '$0 ~ /^[^0-9]*[0-9][^0-9]*$/' nowcoder.txt
发表于 2022-04-08 11:46:20 回复(0)