0

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

是否有可能有一个比这更快的脚本(在单节点机器上)?请注意,我使用read -randid="$(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 ...
4

2 回答 2

6

太多的工作。

awk '{ print >> $1".txt" }' "$1"
于 2013-07-15T21:00:28.757 回答
1

我猜你的缓慢来自于$(echo $line | awk '{print $1}'为每一行做,这意味着操作系统需要为每一行创建两个新进程的工作,awk作为解释器变得更糟。您应该使用 awk(单独)或 Perl 之类的东西将其压缩为一个脚本。

于 2013-07-15T21:03:59.600 回答