Один файл содержит имя файла и оценки | обработка текста - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть папка с именем 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

Это сгенерирует 100 файлов внутри / home / XX / folder / files, но мне нужен один файл, в каждой строке которого два столбца, разделенных табуляцией, содержат счет и имя файла (которыйis i).

оценка \ t имя файла

Итак, вывод будет:

0.9363728 \t resultFile.txt
0.37229 \t outFile.txt

И так далее, любая помощь с этим, пожалуйста?

1 Ответ

0 голосов
/ 15 ноября 2018

Предполагая, что ваша программа 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в качестве вкладки (некоторые варианты будут думать, что это просто обычный t с произвольной обратной косой чертой; замените его буквенной вкладкой или попробуйте ctrl - v tab для ввода буквенной вкладки в командной строке во многих оболочках).

Возможно, гораздо лучше исправить программу Groovy, чтобы она принимала произвольное количество файлов в качестве аргументов командной строки и включала файлимя в выходных данных (возможно, в качестве опции).

...