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

如何将egrep结果作为变量传入awk,实现CSV指定文本匹配追加

CSV数据处理:提取指定字符串并追加到指定列

输入数据集

col1,col2,col3,col4
read1,chr1,Unassigned_NoFeatures,
read2,chr2,Assigned,
read3,chr3,,Assigned

需求

提取每行中的Assigned或Unassigned_NoFeatures字符串,将其追加到第一列的read名称后(目标字符串不固定在同一列,需逐行匹配)。

尝试的错误脚本

cat my_file.csv | variable=$(egrep -o "Assigned|Unassigned_NoFeatures") | awk -F, '{print $1"_"variable,$2}'

期望输出

read1_Unassigned_NoFeatures,chr1
read2_Assigned,chr2
read3_Assigned,chr3

解决方法

原脚本的问题在于一次性将所有匹配结果存入变量,无法实现逐行对应。直接使用awk即可完成整个任务,无需额外调用egrep,以下是两种可行方案:

方案一:遍历列匹配

awk -F, 'NR>1 {
    for(i=1;i<=NF;i++) {
        if($i ~ /^(Assigned|Unassigned_NoFeatures)$/) {
            status=$i
            break
        }
    }
    print $1"_"status","$2
}' my_file.csv
  • NR>1:跳过表头行
  • 循环遍历当前行所有列,找到匹配目标字符串的列后赋值给status
  • 输出拼接后的第一列与第二列

方案二:整行正则匹配提取

awk -F, 'NR>1 {
    match($0, /Assigned|Unassigned_NoFeatures/)
    status=substr($0, RSTART, RLENGTH)
    print $1"_"status","$2
}' my_file.csv
  • match()函数在当前行中匹配目标正则,RSTART和RLENGTH分别记录匹配结果的起始位置和长度
  • substr()提取匹配到的字符串,后续输出逻辑与方案一一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 06:35:24