首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在shell脚本中读取CSV文件内容并找出其中的字符串值

如何在shell脚本中读取CSV文件内容并找出其中的字符串值
EN

Stack Overflow用户
提问于 2021-10-13 11:28:50
回答 1查看 118关注 0票数 3

我有一个数据文件'file1.csv‘,它有两列数据,需要读取文件内容,并根据第一列字符串值'finance & total’和类似的‘营销和总计’找出行之间的信息。脚本应该找到“财务”和“财务总计”,然后得到(A,B,D,H)之间的记录,脚本应该找到“营销”和“营销总计”,然后得到(C,E,G)之间的记录。我不想在“金融”和“营销总计”字符串之后获得记录。

还需要跳过第二个或第三个字段有nan字符串的行。

我尝试了下面的代码,但没有得到预期的输出。

代码语言:javascript
复制
while read line
do
    if [[ $line == "finance" ]]; then
        echo $line >> output.csv
    else
        echo ""
    fi
done < file1.csv

file1.csv:
Departments Accounts  ##Header
Monthwise data        ##Sub Header
IT,Amount
P,20
q,30
IT Total,50
Finance,Amount
A,20
B,30
D,60
H,50
Finance Total,160
<Empty space>
Marketing,Amount
C,40
E,10
G,60
Marketing Total,110
HR,amount
X,20
Y,50
Z,10

预期产出:

代码语言:javascript
复制
department,name,amount
Finance,A,20
Finance,B,30
Finance,D,60
Finance,H,50
Marketing,C,40
Marketing,E,10
Marketing,G,60  

预期输出应存储在输出文件中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-13 11:51:45

使用您所显示的示例,请尝试遵循awk程序。简单的解释是,将逗号设置为FS,对所有行设置OFS,并在BEGIN节本身中打印标题。然后在主程序中,检查不同的条件并打印相应的值。注意,这个程序一旦发现了OP提到的Marketing Total,就会退出。

代码语言:javascript
复制
awk '
BEGIN{
  FS=OFS=","
  print "department,name,amount"
}
/Marketing Total/                          { exit                  }
/Finance Total/ || ($2=="nan" || $3=="nan"){ next                  }
/Finance,Amount/ || /Marketing,Amount/     { found=1;first=$1;next }
found                                      { print first,$0        }
'  Input_file

需要将作为区分大小写的值进行比较,然后尝试下面的代码。

代码语言:javascript
复制
awk '
BEGIN{
  FS=OFS=","
  print "department,name,amount"
}
/Marketing Total/                                            { exit                  }
/Finance Total/ || (tolower($2)=="nan" || tolower($3)=="nan"){ next                  }
/Finance,Amount/ || /Marketing,Amount/                       { found=1;first=$1;next }
found                                                        { print first,$0        }
'  Input_file
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69554704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档