我在一个文件夹中有一堆csv文件。我需要一个sed / bash脚本来完成文件夹中每个文件的以下内容:
获取filename.csv,对每个文件执行一个脚本,并将执行结果粘贴到filename + CurrentDate.csv中,其中当前日期只是没有空格的日期。
例如: 在对其执行函数后,abc.csv将变为abc_02-03-15.csv。
我认为代码看起来像这样:
#!/bin/bash
dir="/var/tmp/"
now=$(date)
for f in "$dir"/*; do
ScriptName
sed OriginalFileName > "OriginalFileName+$now.csv"
done
请提前通知并感谢您的帮助。
答案 0 :(得分:3)
假设您的过滤脚本在stdin上获取其输入并写入stdout:
dir="/var/tmp/"
now=$(date "+%Y-%m-%d")
for f in "$dir"/*; do
ScriptName <"$f" >"${f}_$now.csv"
done
应该相当明显,在循环内,$f
引用输入名称。如果将其替换为字符串的一部分,并且字符后面是有效的变量名称,则必须使用花括号来消除歧义:$f_$now.csv
将查找名为{{的变量1}},而不是f_
。
这里的日期是YYYY-MM-DD形式。这是强烈优于DD-MM-YY或MM-DD-YY,原因如下:它按照与其数字顺序相同的排序顺序排序(因此使用纯ASCII排序的工具,如{ {1}},将显示以这种方式命名为最新到最旧或最旧到最新的文件,并且对于人类读者来说是明确的,无论他们来自DD-MM或MM-DD是哪个国家常规的。