首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取某些行

获取某些行
EN

Stack Overflow用户
提问于 2012-01-12 21:53:28
回答 3查看 79关注 0票数 3

我在以下方面需要帮助:我有一个名为file-1的文件

代码语言:javascript
复制
1
++++++^^++++
++++++++++++
+++++++++^^^
^^++++++++++

2
++++++++++++
^^^+++++^^^^
^^^^^^^+++++
+++++^^^++^+

现在,我想打印出起始号与另一个名为file-2的文件中相同的部分。假设file-2包含1值,因此我需要获得以下输出:

代码语言:javascript
复制
1
++++++^^++++
++++++++++++
+++++++++^^^
^^++++++++++

有人能给我提个建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-12 22:10:05

代码语言:javascript
复制
$ awk -v RS='' 'NR==FNR{split($0, a, /\n/); next}; $1 in a' file-{2,1}
1
++++++^^++++
++++++++++++
+++++++++^^^
^^++++++++++

file-2包含逐行索引:

代码语言:javascript
复制
1
3
5

解释:

  • RS=''告诉rest读取多行records
  • NR==FNR awk作为一行读取file-2,所以我们应该先读取split,并将结果保存在数组records
  • NR==FNR跳过awk命令,准备读取file-1
  • $1 in a测试数组a
  • file-{2,1}中是否有file-1的第一列我们应该先读取file-2以获得所有的索引
票数 4
EN

Stack Overflow用户

发布于 2012-01-12 23:12:16

这可能对你有用:

代码语言:javascript
复制
sed 's|.*|/^&$/,/^$/p|' file2 | sed -nf - file1
1
++++++^^++++
++++++++++++
+++++++++^^^
^^++++++++++
票数 0
EN

Stack Overflow用户

发布于 2012-01-13 02:07:50

使用GNU-awk,您可以尝试这样的操作-

代码语言:javascript
复制
gawk 'NR==FNR {for (i=1;i<=NF;i++) a[$i];next} ($1 in a)' RS='\n\n' file-{2,1}

说明:

  1. 我们使用内置的RS变量将记录分隔符设置为\n\n。我们使用

循环,并在file-2中以数组的形式存储值。这将确定您要从file-1中提取哪些记录。,

  1. ,我们检查file-1的第一列。如果它出现在数组中,我们打印该记录。否则我们就不会了。

测试:

代码语言:javascript
复制
[jaypal:~/Temp] cat file-1
1
++++++^^++++
++++++++++++
+++++++++^^^
^^++++++++++

2
++++++++++++
^^^+++++^^^^
^^^^^^^+++++
+++++^^^++^+

[jaypal:~/Temp] cat file-2
1
3
4

[jaypal:~/Temp] gawk 'NR==FNR {for (i=1;i<=NF;i++) a[$i];next} ($1 in a)' RS='\n\n' file-{2,1}
1
++++++^^++++
++++++++++++
+++++++++^^^
^^++++++++++
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8836184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档