Linux — разное количество строк в 2 наборах файлов

#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