我遇到類似的情況,此處發現的問題是Split single column of csv horizontally in bash into multiple smaller csv files in BASH,問題是在不同的文件中拆分。我需要做類似的事情,但在同一個文件中。按行拆分csv文件並重新排列
我使用的是bash,我有幾個csv文件,直到第27行爲止。然後,一千行數據,然後是另一個標題和另一千行數據。然而,我將簡化這裏:
**row1** Begin of header
...
**row26** TASK1, TASK2, DV-T1, DV-T2
**row27** --- End of header ---
**row28** 1, 111, 1, 991, 1, 1.1, 1, 9.1
**row29** 2, 112, 2, 992, 2, 1.2, 2, 9.2
**row30** 3, 113, 3, 993, 3, 1.3, 3, 9.3
...
**row1028** 1000, 1128, 1000, 1028, 1000, 1.2, 1000, 10.2
**row1029** Begin of 2nd Header
...
**row1039** End of 2nd header
**row1040** 1, 0.1, 1, 0.9
**row1041** 2, 0.2, 2, 0.8
**row1042** 3, 0.3, 3, 0.7
...
**row2040** 1000, 0.6, 1000, 0.6
**row2041** End of 2nd data
**row2042** Performance, 0.87
**row2043** End of file
我期待的行分成1個csv文件,使得:
**row1** task1, dev-task1, task2, dev-task2, FractionT1-T2, Difference
**row2** 111, 1.1, 991, 9.1, 0.1, 0.9
**row3** 112, 1.2, 992, 9.2, 0.2, 0.8
**row4** 113, 1.3, 993, 9.3, 0.3, 0.7
...
**row1001** 1128, 1.2, 1028, 10.2, 0.6, 0.6
這就是我試圖做的:
for strategy in *; do
if [ -d "$strategy" ] ; then
cd $strategy
for file in *; do
if [ -f "$file" ] ; then
namefile=$(printf "${file/.csv/-output.csv}")
#printf "$namefile\n"
awk -F, 'BEGIN{print "task1, dev-task1, task2, dev-task2, FractionT1-T2, Difference"};NR > 27 && NR < 1029 { print $2 "," $6 "," $4 "," $8};NR > 1039 && NR < 2041 {print $2 "," $4 }' "$file" > "$namefile"
fi
done
cd ..
fi
done
然而,輸出只是第一個命令,即,
**row1** task1, dev-task1, task2, dev-task2, FractionT1-T2, Difference
**row2** 111, 1.1, 991, 9.1
**row3** 112, 1.2, 992, 9.2
**row4** 113, 1.3, 993, 9.3
...
**row1001** 1128, 1.2, 1028, 10.2
如何重新排列色譜柱?是否有必要創建兩個文件到後一個合併通過paste -d「」output1.csv output2.csv> real-output.csv?我是否也可以將輸出文件中的第二行的行性能(row2042 Performance,0.87)移動?
有幾個問題:你有辦法'識別'標題。即標題是否始終以相同的線條開始和結束,或者您可以通過正則表達式輕鬆捕捉這些線條? – chw21
第二個問題:在數據中,您總是有完全相同的列數,並且您事先知道列數? – chw21
最後,你想用另一個替換一列? – chw21