我有一个CSV文件,我想删除不同值少于5个的列。e.g
a b c;
1 1 1;
1 2 2;
1 3 4;
2 4 5;
1 6 7;然后我想删除列a,因为它只有两个不同的值(1,2)。该怎么做呢?
发布于 2013-07-12 02:03:47
使用数组的解决方案:
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输出:
b c;
1 1;
2 2;
3 4;
4 5;
6 7;发布于 2013-07-12 00:40:14
我认为要解决这个问题,你可以读取这个文件来获得数据(数字)(可以放在一个数组中),然后搜索你想要删除的列,最后将结果写回文件。
https://stackoverflow.com/questions/17598566
复制相似问题