我试图检查TSV文件的第二个字段的长度(数十万行)。但是,它的运行速度非常慢。我想这应该是“echo”的错误,但不知道该怎么办。
输入文件:
prob name
1.0 Claire
1.0 Mark
... ...
0.9 GFGKHJGJGHKGDFUFULFD
所以我需要打印出名称中出现的问题。我用一个小例子测试了“head -100”并且它有效。但是无法应对原始文件。
这就是我的目的:
for title in `cat filename | cut -f2`;do
length=`echo -n $line | wc -m`
if [ "$length" -gt 10 ];then
echo $line
fi
done
答案 0 :(得分:1)
尝试这个:
cat file.tsv | awk '{if (length($2) > 10) print $0;}'
这应该更快一些,因为整个处理由单个awk
进程完成,而您的解决方案在每个循环迭代中启动2个进程以进行比较。
答案 1 :(得分:1)
如果有帮助,我们可以使用awk。
awk '{if(length($2) > 10){print}}' filename
$ 2这里是文件名中的第二个字段,每行都运行一次。它会更快。
答案 2 :(得分:1)
awk
拯救:
awk 'length($2)>10' file
这将打印第二个字段长度超过10个字符的所有行。
请注意,它不需要任何阻止语句{...}
,因为如果符合条件,awk
将默认打印该行。