2012-05-25 92 views
2

我需要从文件中删除行,而行上的内容是制表符分隔的。 - 我需要首先使用tab分割线,然后计算第三个线段的长度。 - 如果长度大于1000,我会从文件中删除该行。快速帮助bash脚本删除大文件的行

我想使用sed和awk,但很难快速入门。任何人都可以帮忙:)

非常感谢!

+0

你有什么尝试?当读取空格/制表符/任意分隔的文本文件时,awk是显而易见的选择。 –

回答

1

我计算出来...

awk '{p = split($0,a,"\t"); if (length(a[3]) < 1000) print $0}' test.txt > out.txt 

或 AWK -F '\吨' '{如果(长度($ 3)< 1000)打印$ 0}' 的test.txt> out.txt

+5

不需要'split()' - AWK首先免费。见贝克尔的答案。另外,你正在使用'>',但你的问题说你想扔掉很长的线。 –

+3

很高兴你能在awk上快速上手。你可以在6小时后接受你自己的答案,以获得更多的声望点。我的代码和Dennis的评论指出,当你使用'-F“\ t”'和'$ 3'时,这与split($ 0,a,“\ t”)基本相同; print a [3] '。因此,无论哪种方式都是好的,但是您会发现,为每个字段使用编号值,即'$ 1,$ 2,$ 3,...,$ 99 ...'是awk的一个主要特性,可以减少代码量必须写。众所周知,代码越少意味着引入错误的机会越少:-)!祝你们好运。 – shellter

+0

@shellter非常感谢好的提示:)是的,使用字段分隔符是一个更好的解决方案。我会更新我的答案。 – trillions

6
awk -F"\t" 'length($3) < 1001{print}' file > outFile 

-F"\t"说分割线直径:标签,然后打印线,其中第三场的大小(长度)小于1001

我希望这有助于。

+0

你的意思是第三场的长度。 ;-) –

+0

非常感谢,shellter! :)我想出了答案,使用awk的分割函数。哇,awk非常强大! :)再次感谢您的帮助:) – trillions

+0

@DanielKamilKozar是的,确切地说,我会编辑它。 nanshi:很高兴这有帮助,是的,awk非常简单而强大。你为什么需要拆分?第三个字段是否有不同的分隔符? (我使用过的一个技巧:-)好的你正在计算一些东西。请务必阅读http://www.grymoire.com/Unix/Awk.html上的awk教程。祝你们好运。 – shellter