我有一个名为files
的文件夹,其中有100个文件,每个文件中都有一个值;例如:0.974323
这是我的代码,用于生成这些文件并将单个值存储在其中:
DIR="/home/XX/folder"
INPUT_DIR="/home/XX/folder/eval"
OUTPUT_DIR="/home/XX/folder/files"
for i in $INPUT_DIR/*
do
groovy $DIR/calculate.groovy $i > $OUTPUT_DIR/${i##*/}_rates.txt
done
这将在/ home / XX / folder / files内生成100个文件,但是我想要的是一个单独的文件,该文件的每一行中有两列由制表符分隔,包含得分和文件名(即i)
分数\ t文件名
因此,输出将是:
0.9363728 \t resultFile.txt
0.37229 \t outFile.txt
以此类推,对此有什么帮助吗?
答案 0 :(得分:1)
假设您的Groovy程序仅输出分数,请尝试类似
#!/bin/sh
# ^ use a valid shebang
# Don't use uppercase for variables
dir="/home/XX/folder"
input_dir="/home/XX/folder/eval"
output_dir="/home/XX/folder/files"
# Always use double quotes around file names
for i in "$input_dir"/*
do
groovy "$dir/calculate.groovy" "$i" |
sed "s%^%$i\t%"
done >"$output_dir"/tabbed_file.txt
sed
脚本假设文件名不包含百分号,并且您的sed
将\t
识别为制表符(某些变体会认为它只是常规的{{1 }}加上一个反斜杠;将其替换为文字标签,或尝试使用 ctrl - v tab 在出现以下提示时输入文字标签许多贝壳)。
更好的解决方法可能是更改Groovy程序,以便它接受任意数量的文件作为命令行参数,并在输出中包括文件名(可能是一个选项)。