#linux
#linux
Вопрос:
У меня есть 2 папки, в которых содержится 2 набора файлов.
Папка 1
input1.csv
input2.csv
...
Папка 2
output1.json
output2.json
...
В идеале, количество строк в input1 должно быть таким же, как output1, количество строк в input2 должно быть таким же, как output2, и так далее.
Мне нужна команда Linux, чтобы проверить это автоматически и сообщить мне, какие файлы отличаются.
В основном,
If wc -l input1 == wc -l output1,
then skip;
else
show input1 file name (or output1 file name)
repeat for all other files.
Как я могу этого добиться?
Комментарии:
1. В Linux / Unix / BSD они называются «каталогами», а не пользовательской концепцией Windows «папки».
Ответ №1:
что-то вроде этого может помочь
arr=("1.in" "2.in")
arr2=("1.out" "2.out")
for i in ${!arr[@]}; do
v_in=$(wc -l < ${arr[$i]}) ;
v_out= $(wc -l < ${arr2[$i]}) ;
if [ v_in -ne v_out ] then
echo "not equal"
else
echo "equal"
fi
done
Ответ №2:
- перечислите имена файлов из обеих папок
- присоединитесь к списку обеих папок с соответствующими файлами.
- для каждых двух имен файлов
- получить количество строк
- сравните это
- «показать имя файла input1»
Ниже приведен некоторый код, с которого вы можете начать:
list_sorted_filenames() {
find "$1" -maxdepth 1 -mindepth 1 -type f -printf "%fn" | sort
}
paste <(list_filenames "Folder1") <(list_filenames "Folder2") |
while IFS=$'t' read -r input output; do
if (( $(wc -l <"$input") != $(wc -l <"$output") )); then
echo "input=$input
fi
done