Bash 将文件转换为小写并排序
Bash convert file to lowercase and sort
我正在尝试编写一个脚本来接收 inputFile
,将其转换为小写,对其进行排序,然后将结果存储回原始文件中。我是 bash 的新手,所以这是我到目前为止提出的解决方案:
awk '{ print tolower([=11=]) }' $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
,因此排序后的 table 仍然包含大写字母。我试图将 awk
的输出重定向到 > inputFile
,但这也不起作用。
样本inputFile
:
TABLE.thisisaTABLE
taBLe.hellO
HELLO.table
hi.table
期望的输出(回到原来的inputFile
):
hello.table
hi.table
table.hello
table.thisisatable
您可以使用排序的 -o
标志来执行排序和重定向回原始文件:
awk '{ print tolower([=10=]) }' $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
我正在尝试编写一个脚本来接收 inputFile
,将其转换为小写,对其进行排序,然后将结果存储回原始文件中。我是 bash 的新手,所以这是我到目前为止提出的解决方案:
awk '{ print tolower([=11=]) }' $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
,因此排序后的 table 仍然包含大写字母。我试图将 awk
的输出重定向到 > inputFile
,但这也不起作用。
样本inputFile
:
TABLE.thisisaTABLE
taBLe.hellO
HELLO.table
hi.table
期望的输出(回到原来的inputFile
):
hello.table
hi.table
table.hello
table.thisisatable
您可以使用排序的 -o
标志来执行排序和重定向回原始文件:
awk '{ print tolower([=10=]) }' $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