0
我有一個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)。這個怎麼做?
我有一個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)。這個怎麼做?
利用溶液陣列:
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;
我認爲要解決這個問題,你可以讀取這個文件來獲取數據(數字)(可以放入數組),然後搜索你想刪除的列,並最終將這個結果寫回文件。
聲音很像一些家庭作業......你嘗試過這麼遠嗎? – Lochemage