簡體   English   中英

如何在bash中將通用標頭添加到csv文件

[英]How to add a generic header to a csv file in bash

我希望bash腳本將標頭行(具有通用列名)添加到CSV文件。

我的CSV文件內容:

a,b,c,d,e,f,g,h,i,j
a,b,c,d,e,f,g,h,i,j

所需的CSV文件內容:

1,2,3,4,5,6,7,8,9,10
a,b,c,d,e,f,g,h,i,j
a,b,c,d,e,f,g,h,i,j

我一直在嘗試在CSV和ARFF文件格式之間進行轉換,但是來自WekaCSV2Arff.java代碼示例要求輸入CSV文件具有標頭,但我的CSV文件沒有。

用法:

./add_header.sh "input.csv"

bash腳本(即add_header.sh )將csv文件名作為其1參數。

timestamp=$(date +"%Y-%m-%d_%H-%M")
input_csv_file=$1
output_csv_file="header_"$timestamp"_"$input_csv_file

o=""
# Find the number of columns (commas) in the first row
n=$(($(head -n1 $input_csv_file | sed 's/[^,]//g' | wc -c)))    

for i in $(seq 1 $n);  # Get a list of numbers equal to column qty
do
        o=$o""$i",";
done

#Write the numbers with commas to first line of new file.
echo $o > $output_csv_file              
#Append whole of other file to new file.
cat $input_csv_file >> $output_csv_file 

輸出:是一個新文件,其中包含標頭(帶有逗號分隔的編號列),后跟原始CSV文件內容。 例如

1,2,3,4,5,6,7,8,9,10,
a,b,c,d,e,f,g,h,i,j
a,b,c,d,e,f,g,h,i,j

這可以在shell(bash)中一行完成。 例如,如果使用示例文件“ dat.csv”

$ cat dat.csv
a,b,c,d,e,f,g,h,i,j
a,b,c,d,e,f,g,h,i,j

然后

$ cat <(seq -s, 1 $(( `head -n 1 dat.csv | tr -dc "," | wc -c` + 1 ))) dat.csv
1,2,3,4,5,6,7,8,9,10
a,b,c,d,e,f,g,h,i,j
a,b,c,d,e,f,g,h,i,j

您可以將結果放入這樣的新文件中:

$ cat <(seq -s, 1 $(( `head -n 1 dat.csv | tr -dc "," | wc -c` + 1 ))) dat.csv > newfile.csv

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM