Linux用父目录名替换filename中的列

时间:2013-11-22 14:17:32

标签: linux shell replace find sh

我有一个如下所示的文件结构:

浪涌/ Track_000000 / 000_extracted.csv

其中零可以替换为任何数字值

文件000_extracted.csv如下所示:

Timestep  ElementID  SE
1   100   .5
2   100   1.3
3   100   .7
4   100   .2

理想情况下,我希望得到的结果文件如下所示:

Track    Timestep  ElementID  SE
0000000    1   100   .5
0000000    2   100   1.3
0000000    3   100   .7
0000000    4   100   .2

0000000是父目录名称的7位数字跟踪代码。

首先,我想将目录名称(Track_000000)附加到文件名。所以它会从212_extracted.csv转到Track_000000_212_extracted.csv。

我试过了:

for i in 'ls ./Surge/'
do
for j in 'ls ./Surge/$i/'
do
mv -v './Surge/$i/*.csv' './Surge/$i/$i-*.csv'
done
done

这不起作用。虽然$ i应该是Track_0000000,而是告诉我它是/ Surge /.

任何帮助都将不胜感激。

谢谢, ķ

2 个答案:

答案 0 :(得分:2)

这些方面的东西:

for dir in /Surge/*; do
    prefix=$(basename $dir)
    trk=${prefix#Track_}

    for file in $dir/*.csv; do
        awk '{ print TRK, "   ", $0 }' TRK=$trk < $file > ${prefix}_${file}
    done
done

答案 1 :(得分:0)

使用后撇号:`而不是':

for i in `ls ./Surge/`; do
    for j in `ls ./Surge/$i/`; do
       mv -v './Surge/$i/*.csv' './Surge/$i/$i-*.csv'
    done
done