从文件命令中提取第一行,以便

时间:2015-01-02 02:17:01

标签: text awk sed cat head

我有一个包含近5 *(10 ^ 6)行整数的文件。所以,我的文件足够大了。

问题在于提取特定的线条,按条件过滤它们。 例如,我想:

  1. 在不读取整个文件的情况下提取N个第一行。
  2. 提取数字小于或等于X的行(或> =,< =,<,>)
  3. 使用与condition相关的数字(数学谓词)
  4. 提取行

    是否有切割方法来执行这些任务? (使用sedawkcathead

    提前致谢。

1 个答案:

答案 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

...打印条件所在的每一行。