是否可以使写入多个文件的bash脚本运行得更快?

时间:2013-07-15 20:37:00

标签: bash shell scripting

我有一个脚本从文件中读取行,获取每行的第一列,并附加到名为该行的文件(我正在尝试编写许多不同的文件,名为$ id.txt)。

是否可以使脚本执行比此更快的操作(在单节点计算机上)?请注意,我使用read -rid="$(echo $line | awk '{print $1}')",因为我有以制表符分隔的字段,并且在某些字段中存在某些字符,例如反斜杠,我希望保留这些字符。

    while read -r line
    do
        id="$(echo $line | awk '{print $1}')"
        echo "$line" >> $id.txt
    done < $1

我输入的一些特征:

  • 输出$id.txt文件不是那么大,通常平均几百行,最多几千行
  • 实际上已经对id进行了排序,并且这些行以连续的块形式出现,即:
abc ...
abc ...
def ...
def ...
def ...
def ...
ghi ...
ghi ...

2 个答案:

答案 0 :(得分:6)

工作太多了。

awk '{ print >> $1".txt" }' "$1"

答案 1 :(得分:1)

我猜你的缓慢来自于为每一行做$(echo $line | awk '{print $1}',这意味着操作系统需要完成为每一行创建两个新进程的工作,而{{1}成为一名翻译。您应该使用诸如awk(单独)或Perl之类的内容将其压缩为一个脚本。