我需要从文件中删除行,而行上的内容是制表符分隔的。 - 我需要首先使用tab分割线,然后计算第三个线段的长度。 - 如果长度大于1000,我会从文件中删除该行。快速帮助bash脚本删除大文件的行
我想使用sed和awk,但很难快速入门。任何人都可以帮忙:)
非常感谢!
我需要从文件中删除行,而行上的内容是制表符分隔的。 - 我需要首先使用tab分割线,然后计算第三个线段的长度。 - 如果长度大于1000,我会从文件中删除该行。快速帮助bash脚本删除大文件的行
我想使用sed和awk,但很难快速入门。任何人都可以帮忙:)
非常感谢!
我计算出来...
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
不需要'split()' - AWK首先免费。见贝克尔的答案。另外,你正在使用'>',但你的问题说你想扔掉很长的线。 –
很高兴你能在awk上快速上手。你可以在6小时后接受你自己的答案,以获得更多的声望点。我的代码和Dennis的评论指出,当你使用'-F“\ t”'和'$ 3'时,这与split($ 0,a,“\ t”)基本相同; print a [3] '。因此,无论哪种方式都是好的,但是您会发现,为每个字段使用编号值,即'$ 1,$ 2,$ 3,...,$ 99 ...'是awk的一个主要特性,可以减少代码量必须写。众所周知,代码越少意味着引入错误的机会越少:-)!祝你们好运。 – shellter
@shellter非常感谢好的提示:)是的,使用字段分隔符是一个更好的解决方案。我会更新我的答案。 – trillions
awk -F"\t" 'length($3) < 1001{print}' file > outFile
-F"\t"
说分割线直径:标签,然后打印线,其中第三场的大小(长度)小于1001
我希望这有助于。
你有什么尝试?当读取空格/制表符/任意分隔的文本文件时,awk是显而易见的选择。 –