Bash конвертировать файл в нижний регистр и сортировать

Я пытаюсь написать сценарий, который будет принимать inputFileпреобразовать его в нижний регистр, отсортировать и сохранить результаты в исходном файле. Я довольно новичок в bash, так что это решение, которое я придумал до сих пор:

awk '{ print tolower($0) }' $inputFile

index=0
for i in `cat $inputFile`
do                   
    tables[${index}]=$i
    index=$(($index + 1))
done

IFS=$'\n' tables=($(sort <<<"${tables[*]}"))
rm -r $inputFile
printf "%s\n" "${tables[@]}" >> $inputFile

Сортировка этого аспекта работает довольно хорошо, но я не могу сохранить результаты awk к оригиналу inputFileТаким образом, отсортированная таблица по-прежнему содержит заглавные буквы. Я пытался перенаправить вывод awk в > inputFile, но это тоже не сработало.

Образец inputFile:

TABLE.thisisaTABLE
taBLe.hellO
HELLO.table
hi.table

Желаемый вывод (обратно в оригинал inputFile):

hello.table
hi.table
table.hello
table.thisisatable

3 ответа

Решение

Вы можете использовать -o флаг сортировки для выполнения сортировки и перенаправления обратно в исходный файл:

awk '{ print tolower($0) }' $inputFile | sort -o $inputFile

Аналогичное решение с sed:

sed 's/.*/\L&/' $inputFile | sort -o $inputFile

Пояснение: s/.*/\L&/ означает конвертировать всю строку (.*) в нижнем регистре, используя \L, & обозначает согласованный образец.

Вы можете использовать Perl:

$ perl -lne 'push @a, lc; END { print join("\n", sort @a) }' $inputFile
hello.table
hi.table
table.hello
table.thisisatable

Работает:

perl -lne      # invoke perl with a loop around the lines of the file
push @a, lc;   # make line read lower case; push the result
END            # block of code executed at the end
{ print join("\n", sort @a) }   # Print each sorted line with \n 

Если вы хотите изменить файл на месте:

$ perl -i.bak -0777 -lne 'print join("\n", sort map(lc, split /\n/))' file.txt

И если вы не хотите, чтобы резервный файл был сделан:

$ perl -i -0777 -lne 'print join("\n", sort map(lc, split /\n/))' file.txt
Другие вопросы по тегам