2

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
4

3 に答える 3

3

sort フラグを使用して-o、ソートと元のファイルへのリダイレクトの両方を実行できます。

awk '{ print tolower($0) }' $inputFile | sort -o $inputFile
于 2015-02-06T19:39:24.657 に答える
1

sedを使用した同様のソリューション:

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

説明:を使用して行全体 () を小文字にs/.*/\L&/変換することを意味します。一致したパターンを表します。.*\L&

于 2015-02-07T09:40:39.160 に答える