сравнение количества строк в нескольких текстовых файлах - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть несколько текстовых файлов в каталоге, и я хочу сравнить количество строк для каждого файла друг с другом.

Ниже приведен мой код, но вывод неправильный;он всегда показывает меня «больше» независимо от количества строк.

for f in *.txt; do
for f2 in *.txt; do
if [ "wc -l $f" > "wc -l $f2" ]; then 
echo bigger;
fi;
done;done

Я не уверен, правильна ли эта часть, если [ "wc -l $f" > "wc -l $f2" ] правильно.

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Вот что вы хотите:

#!/bin/bash

N=0
M=0
for line in $( find . -type f -name \*.sh ); do
    N=$( wc -l ${line} | cut -d" " -f1 )
    FILE=$( wc -l ${line} | cut -d" " -f2 )
    if [[ ${M} < ${N} ]]; then
        M=${N}
        BIGFILE=${FILE}
        echo "GOTCHA : ${M}"
    fi
done
echo "BIG FILE: ${BIGFILE} ( ${M} lines )"
0 голосов
/ 02 декабря 2018

Двойные кавычки вводят строку, они не запускают вложенную команду.> в [ ... ] сравнивает строки, а не числа, и требует обратной косой черты, иначе это интерпретируется как перенаправление.Кроме того, какой вывод вы ожидаете, когда файлы имеют одинаковый размер (например, когда $ f == $ f1)?

#!/bin/bash
for f in *.txt; do
    size_f=$(wc -l < "$f")
    for f2 in *.txt; do
        size_f2=$(wc -l < "$f2")

        if (( size_f > size_f2 )) ; then
            echo "$f" bigger than "$f2"
        elif (( size_f == size_f2 )) ; then
            echo "$f" same size as "$f2"
        else
            echo "$f" smaller than "$f2"
        fi
    done
done
...