我编写了一个简单的代码,它从文本文件(其中有空格分隔的列和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
-
如果你只是想要更快的东西,使用
中提取第三个字段cut
这样的实用程序。所以从单个以空格分隔的文件bigfiledo:cut -d ' ' -f 3 bigfile
-
要优化问题中的shell代码,只使用内置shell命令,执行如下命令:
while read a b c d; echo "$c"; done < bigfile
…如果要打印的字段是命令行参数,则有几个shell命令方法,但它们都基于那一行。