【发布时间】:2014-07-03 06:31:16
【问题描述】:
为了方便和快速地调试我的R 代码,我决定创建一个很小的AWK 脚本。它所要做的就是解码特定目录中所有 base64 编码的文件名 (.RData)。我已经尽力了两次。以下是我到目前为止的结果。任何帮助将不胜感激!
第一次尝试是AWK脚本嵌入在shell命令中:
ls -1 ../cache/SourceForge | awk 'BEGIN {FS="."; print ""} {printf("%s", $1); printf("%s", " -> "); print $1 | "base64 -d -"; print ""} END {print ""}'
产生的输出接近所需的,但是,这种单行打印不是将每个解码的文件名与原始编码的文件名打印在同一行上处理结束时的所有解码名称,根本没有输出分隔符:
cHJqTGljZW5zZQ== ->
cHViUm9hZG1hcA== ->
dG90YWxEZXZz ->
dG90YWxQcm9qZWN0cw== ->
QWxsUHJvamVjdHM= ->
Y29udHJpYlBlb3BsZQ== ->
Y29udHJpYlByb2Nlc3M= ->
ZG1Qcm9jZXNz ->
ZGV2TGlua3M= ->
ZGV2U3VwcG9ydA== ->
prjLicensepubRoadmaptotalDevstotalProjectsAllProjectscontribPeoplecontribProcessdmProcessdevLinksdevSupport
第二次尝试是下面的独立AWK脚本:
#!/usr/bin/gawk -f
BEGIN {FS="."; print ""; files = "ls -1 ../cache/SourceForge"}
{
decode = "base64 -d -";
printf("%s", $1); printf("%s", " -> "); print $1 | decode; print ""
}
END {print ""}
然而,这个脚本的行为是令人惊讶的,首先,它等待输入,其次,在收到EOF (Ctrl-D) 时,它不会'不产生任何输出。
【问题讨论】:
-
我不在乎我的评分,只是好奇为什么要投反对票。需要解释一下吗?
-
不是我,但我想知道为什么你不只是问“这打印出
foo bar 8。为什么不是foo 4 bar 4?printf "foo\nbar\n" | awk '{ print $1; print $1 | "wc -c"; }'” -
@thatotherguy:感谢您的评论!虽然有些人更喜欢简洁,但其他人更喜欢理解上下文,它通常包含基本细节,因此很重要。我相信每个人都是独一无二的,因此,在提问、提供信息等方面都有她/他自己的风格。我不认为个人的做事风格应该被视为没有价值。
-
示例应该是small, self contained and correct。要求人们有一个 sourceforge 缓存目录来重现问题不是个人风格的问题。
-
@thatotherguy:我明白了。谢谢你表达你的观点。正如我所说,这也是个人对围绕核心信息的上下文数量的容忍度(和价值)的问题。一方面,上下文是一种干扰,另一方面 - 它是更好地理解主题的宝贵元素。再次感谢并致以最良好的祝愿!
标签: bash awk scripting base64 text-parsing