我有一个包含近5 *(10 ^ 6)行整数的文件。所以,我的文件足够大了。
问题在于提取特定的线条,按条件过滤它们。 例如,我想:
condition
相关的数字(数学谓词)是否有切割方法来执行这些任务? (使用sed
或awk
或cat
或head
)
提前致谢。
答案 0 :(得分:0)
提取第一条$NUMBER
行
head -n $NUMBER filename
假设每一行只包含一个数字(虽然如果第一个标记是1,它也会起作用),2可以像这样解决:
awk '$1 >= 1234 && $1 < 5678' filename
与此保持一致,3只是延伸
awk 'condition' filename
如果您已经指定了condition
应该是什么,那将会有所帮助。这样,您将必须阅读awk文档以了解如何对其进行编码。同样,该数字将由$1
表示。
我认为我不能解释有关head
电话的任何内容,它实际上就是它所说的。至于awk
行:awk
,如sed
,则按行工作。 awk
在循环中获取行并将代码应用于每一行。此代码采用
condition1 { action1 }
condition2 { action2 }
# and so forth
对于每次获取awk的行,将按照它们出现的顺序检查条件,如果条件为真,则执行对每个条件的相关操作。例如,它可以用这样的awk提取文件的第一行$NUMBER
:
awk -v number="$NUMBER" '1 { print } NR == number { exit }' filename
其中1
与true同义(如在C中),NR
是行号。 -v
命令行选项会将awk变量number
初始化为$NUMBER
。如果未指定任何操作,则默认操作为{ print }
,其将打印整行。所以
awk 'condition' filename
是
的简写awk 'condition { print }' filename
...打印条件所在的每一行。