Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何减少shell脚本的运行时间?_Shell_Ubuntu_Optimization_Large Files - Fatal编程技术网

如何减少shell脚本的运行时间?

如何减少shell脚本的运行时间?,shell,ubuntu,optimization,large-files,Shell,Ubuntu,Optimization,Large Files,我已经编写了一个简单的代码,它从文本文件(具有空格分隔的列和150万行)中获取数据,并给出具有指定列的输出文件。但这段代码需要一个多小时才能执行。有人能帮我优化运行时吗 a=0 cat 1c_input.txt/$1|读取p时 做 IFS=“” 我用p美元买的 做 a=`expr$a+1` 如果[$a-等式$2] 然后 回音“$i” fi 完成 a=0 完成>>。/1.c.$2.column.freq 一些示例输入行: 1 ib Jim 34 1 cr JoHn 24 1 ut MaRY 46

我已经编写了一个简单的代码,它从文本文件(具有空格分隔的列和150万行)中获取数据,并给出具有指定列的输出文件。但这段代码需要一个多小时才能执行。有人能帮我优化运行时吗

a=0
cat 1c_input.txt/$1|读取p时
做
IFS=“”
我用p美元买的
做
a=`expr$a+1`
如果[$a-等式$2]
然后
回音“$i”
fi
完成
a=0
完成>>。/1.c.$2.column.freq
一些示例输入行:

1 ib Jim 34
1 cr JoHn 24
1 ut MaRY 46
2 ti Jim 41
2 ye john 6
2 wf JoHn 22
3 ye jOE 42
3 hx jiM 21
如果输入的第二个参数为3,则示例输出的某些行:

Jim
JoHn
MaRY
Jim
john
JoHn
jOE
jiM

我猜你是想只打印一列,然后像这样做

#! /bin/bash
awk -v c="$2" '{print $c}' 1c_input.txt/$1 >> ./1.c.$2.column.freq
  • 如果您只是想要更快的速度,请使用类似于
    cut
    的实用程序。所以 从单个空格分隔的文件bigfile中提取第三个字段 做:

  • 要优化问题中的shell代码,请仅使用内置shell 命令,执行以下操作:

    while read a b c d; echo "$c"; done < bigfile
    
    在读取b c d时;回声“$c”;完成<大文件
    
    …如果要打印的字段是命令行参数,则 有几种shell命令方法,但它们都基于这一行


  • 您试图通过脚本实现什么?1 ib Jim 34 1 cr JoHn 24 1 ut MaRY 46 2 ti Jim 41这是4行示例输入,在输出中我只想要名称
    bash:[:1:预期的一元运算符
    -它应该做什么?请澄清目标是1)优化效率低下的代码,仅使用shell命令;还是2)用其他更快的util替换所有代码。
    while read a b c d; echo "$c"; done < bigfile