从文件命令中提取第一行,这样

extracting first line from file command such that

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

问题是关于提取特定行,按条件过滤它们。 例如,我想:

  1. 提取前 N 行而不读取整个文件。
  2. 提取数字小于或等于 X(或 >=、<=、<、>)的行
  3. 提取与 condition 相关的数字(数学谓词)
  4. 的行

有没有更简单的方法来执行这些任务? (使用 sedawkcathead

提前致谢。

要提取前 $NUMBER 行,

head -n $NUMBER filename

假设每一行只包含一个数字(尽管如果第一个标记是一个也可以),2 可以这样解决:

awk ' >= 1234 &&  < 5678' filename

本着精神,3 只是扩展名

awk 'condition' filename

不过,如果您指定了 condition 应该是什么,那将会有所帮助。这样,您就必须阅读 awk 文档以了解如何对其进行编码。同样,该数字将由 </code>.</p> 表示 <p>我认为我无法解释有关 <code>head 调用的任何内容,它实际上就是它所说的。至于 awk 行:awksed 一样按行工作。 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

对于

来说是shorthand
awk 'condition { print }' filename

...打印条件成立的每一行。