【发布时间】:2019-02-09 06:05:33
【问题描述】:
所以,我有多个表单文件
filename_date.csv
在文件夹中,例如
filename_2010_01_01.csv
该文件包含,例如... 1000 行,格式如下
37845287|2364532467|237849853
04568750|89345735385|94573857
但我全年有 365 个这样的文件,每天一个。我想做的是制作某种bash?脚本可能会从文件名中获取日期并将其附加到每个文件中每个 x 行的末尾,因此结果将类似于
文件名_2010_01_01.csv
37845287|2364532467|237849853|2010_01_01
04568750|89345735385|94573857|2010_01_01
文件名_2010_01_02.csv
438574|563546567|2342523525|2010_01_02
326345452|456454763|7856763|2010_01_02
到目前为止我已经尝试过:
我试过了
sed 's/$/|2010-01-01/' filename_2010-01-01.csv > filename_2010-01-01.csv
适用于单个文件。
现在我正在尝试以下循环
FILES=~/Desktop/2010/byday/*
for f in $FILES
do
filename=$f | cut -d'/' -f7-
done
一旦我在那里有了文件的名称,我就可以在循环中添加 sed 命令,但我无法让 filename var 获取命令的值
如果我只是在循环中回显命令,它确实会得到文件名,该命令只是从文件名中删除路径。
更新:
循环内部
filename=`basename $f`
那个更短、更简洁的变量实际上得到了值
更新 2:
这个循环
FILES=~/Desktop/2010/byday/*
for f in $FILES
do
fname=`basename $f`
fname=${fname%.csv}
fname=${fname##filename_}
echo $fname
sed 's/$/|$fname/' filename_$fname.csv > filename__$fname.csv
done
实际上正确输出了日期,但是 sed 命令中有一些东西删除了文件的内容
更新 3:
有了这个,我就快到了
FILES=~/Desktop/2010/byday/*
for f in $FILES
do
fname=`basename $f`
fname=${fname%.csv}
fname=${fname##partitioned.csvmerged_}
sed 's/$/|$fname/' partitioned.csvmerged_${fname}.csv > $fname.csv
done
它写入一个新文件,仅将日期作为文件名(这很好),但我不确定我应该如何在其中插入 var,因为文件内的输出是
438574|563546567|2342523525|$fname
326345452|456454763|7856763|$fname
【问题讨论】:
-
努力添加到问题中
-
我看到了,我现在正在写入一个新文件...但是 var 插值有问题。你能看看更新3吗?
标签: bash terminal file-manipulation