Unix 在另一个文件中指定的命令行输出行
iam正在搜索某个命令行,该命令行接收文本文件和带有行号的文件(每行一个)(或者来自stdin),并仅输出第一个文件中的行 文本文件可能有数百MB大,行列表可能包含数千个条目(但按升序排序) 简言之:Unix 在另一个文件中指定的命令行输出行,unix,command-line,text-processing,Unix,Command Line,Text Processing,iam正在搜索某个命令行,该命令行接收文本文件和带有行号的文件(每行一个)(或者来自stdin),并仅输出第一个文件中的行 文本文件可能有数百MB大,行列表可能包含数千个条目(但按升序排序) 简言之: 一个文件包含数据 另一个文件包含索引 命令应仅提取索引行 第一个文件: many lines of course they are all very different and contain very important data ... more lines ... even more
- 一个文件包含数据
- 另一个文件包含索引
- 命令应仅提取索引行
many lines
of course they are all very different
and contain very important data
...
more lines
...
even more lines
第二档
1
5
7
预期产量
many lines
more lines
even more lines
第二个(行号)文件不一定存在。其数据也可能来自stdin(实际上,这将是最佳的)。此外,如果这会使任务更容易,则该数据的格式可能与显示的格式不同 这可以是一种方法:
$ awk 'FNR==NR {a[$1]; next} FNR in a' file_with_line_numbers file_with_data
many lines
more lines
even more lines
它读取带有行号的文件,并将行存储在数组a[]
中。然后,它读取另一个文件并不断检查行号是否在数组中,在这种情况下,将打印行号
使用的技巧如下:
awk 'FNR==NR {something; next} {other things}' file1 file2
它在{something}
块中执行与file1
相关的操作,然后在{other things}
块中执行与file2
相关的操作
如果行号是通过stdin给出的呢?
为此,您可以使用awk'…'-file
,以便使用-
调用stdin。这就是所谓的。因此,您可以:
your_commands | awk 'FNR==NR {a[$1]; next} FNR in a' - file_with_data
试验
这可以是一种方法:
$ awk 'FNR==NR {a[$1]; next} FNR in a' file_with_line_numbers file_with_data
many lines
more lines
even more lines
它读取带有行号的文件,并将行存储在数组a[]
中。然后,它读取另一个文件并不断检查行号是否在数组中,在这种情况下,将打印行号
使用的技巧如下:
awk 'FNR==NR {something; next} {other things}' file1 file2
它在{something}
块中执行与file1
相关的操作,然后在{other things}
块中执行与file2
相关的操作
如果行号是通过stdin给出的呢?
为此,您可以使用awk'…'-file
,以便使用-
调用stdin。这就是所谓的。因此,您可以:
your_commands | awk 'FNR==NR {a[$1]; next} FNR in a' - file_with_data
试验
使用sed,将行号转换为sed程序,并使用生成的程序打印想要的行
$ sed -n "$( sed 's/$/p/' second_file )" first_file
many lines
more lines
even more lines
使用sed,将行号转换为sed程序,并使用生成的程序打印想要的行
$ sed -n "$( sed 's/$/p/' second_file )" first_file
many lines
more lines
even more lines
这也行得通
每行(“cat file2
”)
弗雷奇?sed-n“$line p”文件1
弗雷奇?结束
多行
更多线路
甚至更多的行这也行
每行(“cat file2
”)
弗雷奇?sed-n“$line p”文件1
弗雷奇?结束
多行
更多线路
甚至更多的线非常聪明的方法。我不知道sed-n“2p>3p”文件可以工作。我在cmd.exe上没有得到这个工作。awk thingens可以工作。我得到sed:-e表达式2,字符2:未知命令:(“
-我的路径中似乎有一个非常旧的sed,即使使用4.2它也不起作用。此脚本似乎与不兼容windows@vlad_tepesch,为什么要将问题标记为“unix”如果你在windows中工作?@glennjackman,因为我希望unix风格操作系统附带的常用命令行文本处理工具具有一些魔力,因为windows基本上缺少这类工具。通常我安装了这类工具,它们的工作原理与unix完全相同。非常聪明的方法。我不知道这是什么ed-n“2p>3p”文件
可以工作。我在cmd.exe上没有得到这个工作awk thingens可以工作我得到了sed:-e expression#2,char 2:Unknown命令:(“
-似乎一个非常旧的sed在我的路径中,即使使用4.2它也不工作。似乎这个脚本与windows@vlad_tepesch,你为什么在问题上加标签“unix"如果您在windows中工作?@glennjackman,因为我想让unix风格操作系统附带的常用命令行文本处理工具具有一些魔力,因为windows基本上缺少这类工具。通常我安装了这类工具,它们的工作原理与unix完全相同。有没有办法避免使用文件行_数字
并改用标准输入法?可能吧。请举例说明如何给出标准输入法(格式等)通过更新您的原始帖子。由于我通过管道从其他文本操作命令收集这些行号,因此输入格式并不重要,因为我可以很容易地进行调整。但首先让我们假设它与文件中的相同-每行一个数字。有没有办法避免使用行号的文件
,并使用stdin相反?可能吧。举个例子说明你的标准输入码是如何给出的(格式等)通过更新您的原始帖子。由于我通过管道从其他文本操作命令中收集这些行号,因此输入格式并不重要,因为我可以非常轻松地进行调整。但首先让我们假设它与文件中的行号相同-每行一个数字。