首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算模式数

计算模式数
EN

Stack Overflow用户
提问于 2013-07-12 00:19:19
回答 2查看 48关注 0票数 0

我有一个CSV文件,我想删除不同值少于5个的列。e.g

代码语言:javascript
运行
复制
a b c;
1 1 1;
1 2 2;
1 3 4;
2 4 5;
1 6 7;

然后我想删除列a,因为它只有两个不同的值(1,2)。该怎么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-12 02:03:47

使用数组的解决方案:

代码语言:javascript
运行
复制
infile="infile.txt"

different=5
rows=0

while  read -a line ; do
  data+=( ${line[@]/;/} )                        # remove all semicolons
  ((rows++))
done < "$infile"

cols=$(( ${#data[@]}/rows ))                     # calculate number of rows

result=()
for (( CNTR1=0; CNTR1<cols; CNTR1+=1 )); do
  cnt=()
  save=( ${data[CNTR1]} )                        # add column header
  for (( CNTR2=cols; CNTR2<${#data[@]}; CNTR2+=cols )); do
    cnt[${data[CNTR1+CNTR2]}]=1
    save+=( ${data[CNTR1+CNTR2]} )               # add column data
  done
  if [ ${#cnt[@]} -eq $different ] ; then        # choose column?
    result+=( ${save[@]} )                       # add column to the result
  fi
done

cols=$((${#result[@]}/rows))                     # recalculate number of columns

for (( CNTR1=0; CNTR1<rows; CNTR1+=1 )); do
  for (( CNTR2=0; CNTR2<${#result[@]}; CNTR2+=rows )); do
    printf " %s" "${result[CNTR1+CNTR2]}"
  done
  printf ";\n"
done

输出:

代码语言:javascript
运行
复制
 b c;
 1 1;
 2 2;
 3 4;
 4 5;
 6 7;
票数 1
EN

Stack Overflow用户

发布于 2013-07-12 00:40:14

我认为要解决这个问题,你可以读取这个文件来获得数据(数字)(可以放在一个数组中),然后搜索你想要删除的列,最后将结果写回文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17598566

复制
相关文章

相似问题

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