linux中一个特定字段的长度比较

时间:2018-03-22 10:32:33

标签: linux shell

我试图检查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

3 个答案:

答案 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将默认打印该行。