【发布时间】:2015-04-07 00:44:53
【问题描述】:
我正在尝试编写一个脚本,它将接收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
【问题讨论】:
-
它看起来很有趣,几乎没有什么需要改进的地方(
while read line; do ... done < file优于for i in cat...)。您能否指出具有所需输出的示例输入文件? -
IFS的用法不是该行本地的。 -
@fedorqui 我已经更新了 OP 以包含信息。
-
你的目标是什么版本的 bash?
-
为什么不只是
awk '{ print tolower($0) }' $inputFile | sort -o $inputFile?您在排序时是否希望进行其他处理?
标签: bash sorting awk lowercase ifs