You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下不用awk过滤CSV非空行及倍数求和脚本开发咨询

问题1:过滤CSV文件中最后两列含空值的行

你的CSV示例里空值是带空格的(比如, , e里第二列是空格、, g, 里第三列是空格),之前的cut命令参数有误——正确的cut应该用-d","指定分隔符,-f2,3选择第2、3列,同时要匹配包含空格空值的情况。

可以用以下命令实现:

# 合并表头和过滤后的内容,一次性输出结果
{ head -n1 file.csv; tail -n+2 file.csv | grep -E ", [^,]+, [^,]+$"; } | cut -d"," -f2,3

命令解释:

  • head -n1 file.csv:提取CSV的表头行
  • tail -n+2 file.csv:从第二行开始处理数据行
  • grep -E ", [^,]+, [^,]+$":匹配第二、三列都有非空内容的行([^,]+表示至少一个非逗号字符,确保列内容不为空)
  • 最后用cut截取第2、3列,输出结果与你期望的一致:
f2 f3
 b, c
 i, j
问题2:提取文本文件中指定数字的倍数并求和的Linux脚本

创建脚本sum_multiples.sh,内容如下:

#!/bin/bash

# 校验参数数量是否正确
if [ $# -ne 2 ]; then
    echo "用法: $0 <文本文件> <数字>"
    exit 1
fi

file="$1"
target_num="$2"

# 校验文件是否存在
if [ ! -f "$file" ]; then
    echo "错误: 文件 $file 不存在"
    exit 1
fi

# 校验第二个参数是否为正整数
if ! [[ "$target_num" =~ ^[0-9]+$ ]]; then
    echo "错误: 第二个参数必须是正整数"
    exit 1
fi

sum=0

# 遍历文件每一行,筛选倍数并求和
while read -r line; do
    if [[ "$line" =~ ^[0-9]+$ ]]; then
        if [ $((line % target_num)) -eq 0 ]; then
            sum=$((sum + line))
        fi
    fi
done < "$file"

echo "数字 $target_num 的倍数总和为: $sum"

使用方法:

  1. 给脚本添加执行权限:chmod +x sum_multiples.sh
  2. 运行脚本:./sum_multiples.sh 数字文件.txt 3(假设数字文件.txt是每行一个数字的文本文件)

示例:若数字文件.txt内容为:

1
3
6
8
9

执行./sum_multiples.sh 数字文件.txt 3会输出:数字 3 的倍数总和为: 18

内容的提问来源于stack exchange,提问作者Sharpe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:33:36