我需要以下帮助:我有这种名为file-1
1
++++++^^++++
++++++++++++
+++++++++^^^
^^++++++++++
2
++++++++++++
^^^+++++^^^^
^^^^^^^+++++
+++++^^^++^+
现在,我想打印出起始编号与另一个名为file-2
的文件相同的部分。
我们假设file-2
包含1
值,因此我需要获得此输出:
1
++++++^^++++
++++++++++++
+++++++++^^^
^^++++++++++
有人可以给我一些建议吗?
答案 0 :(得分:4)
$ awk -v RS='' 'NR==FNR{split($0, a, /\n/); next}; $1 in a' file-{2,1}
1
++++++^^++++
++++++++++++
+++++++++^^^
^^++++++++++
file-2
逐行包含索引:
1
3
5
RS=''
告诉awk
阅读多行记录NR==FNR
将file-2
视为一行,因此我们应split
\n
,并将结果保存在数组{{1}中} a
跳过休息命令,准备阅读next
file-1
测试$1 in a
列表中的第一列file-1
a
我们应首先阅读file-{2,1}
以获取所有索引答案 1 :(得分:0)
这可能对您有用:
sed 's|.*|/^&$/,/^$/p|' file2 | sed -nf - file1
1
++++++^^++++
++++++++++++
+++++++++^^^
^^++++++++++
答案 2 :(得分:0)
使用GNU-awk,你可以试试这样的东西 -
gawk 'NR==FNR {for (i=1;i<=NF;i++) a[$i];next} ($1 in a)' RS='\n\n' file-{2,1}
说明:
- 我们使用内置的RS变量将记录分隔符设置为
\n\n
。- 我们使用for循环并将值存储在数组中的
file-2
中。这将标识您要从file-1
提取的记录。- 我们会检查
醇>file-1
的第一列。如果它存在于数组中,我们打印该记录。不,我们不。
[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
++++++^^++++
++++++++++++
+++++++++^^^
^^++++++++++