Jon*_*ono 13 bash shell awk command-line grep
那么让我解释一下这个:
我有一个名为tags的目录,每个标签都有一个文件,如:
tags/
t1
t2
t3
Run Code Online (Sandbox Code Playgroud)
在每个标记文件中都有如下结构:
<inode> <filename> <filepath>
Run Code Online (Sandbox Code Playgroud)
当然,每个标记文件都有一个包含该标记的许多文件的列表(但文件只能出现在一个标记文件中一次).并且文件可以在多个标签文件中.
我想要做的就是调用命令
tags <t1> <t2>
Run Code Online (Sandbox Code Playgroud)
让它以一种很好的方式列出标记为t1和t2的文件.
我现在的计划是制作临时文件.基本上将t1的整个文件输出到其中.然后在t2中遍历每一行并对文件执行awk.并继续这样做.
但我想知道是否有人有任何其他方式.我对awk,grep等不太熟悉.
jks*_*hah 17
您可以尝试使用comm实用程序
comm -12 <t1> <t2>
Run Code Online (Sandbox Code Playgroud)
comm 使用followinng选项的适当组合可以对文件内容的不同设置操作有用.
-1 suppress column 1 (lines unique to FILE1)
-2 suppress column 2 (lines unique to FILE2)
-3 suppress column 3 (lines that appear in both files)
Run Code Online (Sandbox Code Playgroud)
这假定<t1>并<t2>排序.如果没有,他们应该首先排序sort
Ada*_*iss 16
你能用吗?
sort t1 t2 | uniq -d
Run Code Online (Sandbox Code Playgroud)
这将合并两个文件,对它们进行排序,然后仅显示多次出现的行:即两个文件中出现的行.
这假定每个文件中不包含重复项,并且inode在特定文件的所有结构中都是相同的.