year start year end location topic data type data value
2016 2017 AL Alcohol Crude Prevalence 16.9
2016 2017 CA Alcohol Other 15
2016 2017 AZ Neuropathy Other 13.1
2016 2017 HI Smoke Crude Prevalence 20
2016 2017 IL Cancer Other 20
2016 2017 KS Cancer Other 14
2016 2017 AZ Smoke Crude Prevalence 16.9
2016 2017 KY Cancer Other 13.8
2016 2017 LA Alcohol Crude Prevalence 18
需要答案来计算与“主题”“酒精”和“癌症”相关的行。
我已经获得名为“ topic”的列的索引,但是我要从“ topic”中提取的内容不正确,因此我无法计算包含“酒精”和“癌症”的行“,如何解决?
这是我的代码:
awk '{print $4}' AAA.csv > topic.txt
head -n5 topic.txt | less
答案 0 :(得分:1)
您可以尝试以下操作:
对awk的调用获取了相关的列,grep过滤了关键字,字数统计了行数
$ awk '{ print $4 }' data.txt | grep -e Alcohol -e Cancer | wc -l
6
答案 1 :(得分:1)
在grep中使用正则表达式:
cat data.txt|tr -s " "|cut -d " " -f 4|grep -E '(Alcohol|Cancer)'|wc -l
如果您确定“酒精”和“癌症”一词仅出现在第4列中,您可以这样做
grep -E '(Alcohol|Cancer)' data.txt|wc -l
添加
OP在评论中询问:
如果有很多列,而我不知道它们的索引。如何仅根据列名(“主题”)提取列?
此代码将在变量i
中存储包含“主题”的列。本质上,代码将data.txt
的第一行存储为数组变量s
,然后解析数组元素,直到找到所需的单词。 (由于数组索引从0开始,因此您必须在末尾将i
加1。
注意:该代码仅在实际上找到“主题”列时才有效。
head -n 1 data.txt|read -a s
for (( i=0; i<${#s[@]}; i++ ))
do
if [ "${s[$i]}" == "topic" ]
then
break
fi
done
i=$(( $i + 1 ))