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



我编写了一个简单的代码,它从文本文件(其中有空格分隔的列和150万行)中获取数据,并给出具有指定列的输出文件。但这段代码的执行时间超过1小时。谁能帮我优化运行时间

a=0
cat 1c_input.txt/$1 | while read p  
do
IFS=" "
for i in $p
do
a=`expr $a + 1`
if [ $a -eq $2 ]
then
echo "$i"
fi
done
a=0
done >> ./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

我猜你是想打印1列,然后输入

#! /bin/bash
awk -v c="$2" '{print $c}' 1c_input.txt/$1 >> ./1.c.$2.column.freq
  1. 如果你只是想要更快的东西,使用cut这样的实用程序。所以从单个以空格分隔的文件bigfiledo:

    中提取第三个字段
    cut -d ' ' -f 3 bigfile
    
  2. 要优化问题中的shell代码,只使用内置shell命令,执行如下命令:

    while read a b c d; echo "$c"; done < bigfile
    

    …如果要打印的字段是命令行参数,则有几个shell命令方法,但它们都基于那一行。

最新更新