2017-05-03 54 views
0

需要您的帮助。寻找可以将follwing输入文件转换为所需输出的shell脚本。我们使用的Bash shellShell脚本中的文本转换

输入文件(.txt)包含:

,,,,Jan_1,Jan_2,Jan_3,Jan_4,Jan_5,.........Jan_30,Feb_1,Feb,2...Dec_31 
a,b,c,d,88,89,91,.........(365 numbers) 
e,f,g,h,34,23,17,..........(365 numbers) 
i,j,k,l,52,63,86,.........(365 numbers) 

预期输出:

a,b,c,d,Jan_1,88 
a,b,c,d,Jan_2,89 
a,b,c,d,Jan_3,91 
.... 
.... 
a,b,c,d,Jan_31,656 
a,b,c,d,Feb_1,23 
.... 
.... 
a,b,c,d,Dec_31,656 
e,f,g,h,Jan_1,34 
e,f,g,h,Jan_2,23 
e,f,g,h,Jan_3,17 
... 
... 
... 
e,f,g,h,Aug_3,454 
.... 
... 
e,f,g,h,Dec_31,878  
i,j,k,l,Jan_1,52 
i,j,k,l,Jan_2,63 
i,j,k,l,Jan_3,86 
..... 
.... 
i,j,k,l,Dec_31,23 

的输入文件记录的数量大约是13K。 请指教。

我想将第一行存储到一个数组中,然后将前四列作为矩阵,然后进行交叉乘法以获得转置的效果。

/

/ stored the first line in an array array1 
// From second line using this to get the matrix 
while IFS=, read -ra arr; do 


    ## Unable to multiply this arr with array1 

    echo ${arr[@]:0:4} 

done < 'working file. 

TXT”

+0

欢迎#1。请浏览https://stackoverflow.stackexchange.com/Tour – SDsolar

+1

在Stackoverflow上,你的问题需要你尝试解决问题,然后你卡在哪里,然后你的问题反映在你的标题中。请返回并编辑此问题,以便以此方式呈现。 – SDsolar

+0

我已经投票结束这个问题,因为它似乎是一个工具或解决方案的推荐请求,而不是一个请求帮助你自己的代码。这使您的问题脱离了StackOverflow。如果该评估不正确,并且确实需要帮助修复自己的代码,那么请[将您的工作添加到您的问题中](http://stackoverflow.com/posts/43750058/edit),然后我会愉快地收回我的近距离投票。 – ghoti

回答

0

Awk可以帮助

awk 'BEGIN{FS=","}NR>1{ 
for(i=1;i<=3;i++){ 
    for(j=1;j<4;j++){ 
    printf("%s,",$j) 
    } 
printf("Jan_%d,%s",i,$(i+j)) 
print "" 
} 
}' filename 
a,b,c,Jan_1,10 
a,b,c,Jan_2,20 
a,b,c,Jan_3,30 
e,f,g,Jan_1,11 
e,f,g,Jan_2,21 
e,f,g,Jan_3,31 
i,j,k,Jan_1,12 
i,j,k,Jan_2,22 
i,j,k,Jan_3,32 
+0

请注意,正如其他评论所述,您所做的工作在您的问题中是强制性的。下次,当您提出问题时,请添加您的代码片段。 SO中通常不鼓励没有真正尝试解决问题的答案。 – sjsam

+0

谢谢@sjsam。但挑战是数字可能会有所不同。我只是把这些数字作为例证。列数为365天(例如: - Jan_1,Jan_2,Jan_3,... Feb_1,... Feb_28,..... Dec_1,Dec_31)。 – user7954993

+1

使用Python解决它。 – user7954993