我有2个文件:
FILE1.TXT:
1 A bla 9232
1 B tesfs 3049
1 C blof 4054
2 D dkeeez 3049
2 E eor 4042
3 F foaer 4024
FILE2.TXT:
A
B
E
预期输出,file3.txt:
1 A bla 9232
1 B tesfs 3049
2 E eor 4042
输出只是file1中包含第2列中与file2中相同值的行。
在file2.txt中,每一行都是唯一的,但您可以拥有:
A
AA
AAee
B
...
我尝试使用grep -Ff file2.txt file1.txt,但file3.txt中仍然存在但不存在于file2.txt中的行 解决方案可以是在线或在shell脚本中,我尝试使用" awk"和shell脚本,没有结果......
答案 0 :(得分:4)
您可以使用awk命令:
private void btnGraphStreamActionPerformed(java.awt.event.ActionEvent evt)
{
new Clicks();
}
在第一次迭代中,我们将awk 'FNR==NR{a[$1]; next} $2 in a' file2.txt file1.txt
中的所有值存储到数组file2.txt
中。在第二步白色迭代a
中,我们检查第2列是否在数组file1.txt
中并打印出来。
<强>输出:强>
a
答案 1 :(得分:1)
如果您的输入已排序(join
的字段2和file1.txt
的字段1),file2.txt
有用的一件事 - 您的示例显示已排序的输入,但如果您的真实输入不是,那么您必须在join
工作之前解决这个问题:
join -1 2 -2 1 -o 1.1,1.2,1.3,1.4 file1.txt file2.txt
答案 2 :(得分:0)
我喜欢anubbhava的awk解决方案。这是一个替代解决方案,使用grep:
# Add word anchors before and after each word in file2.txt
sed 's/^/\\b/;s/$/\\b/' file2.txt > temp.txt
grep -f temp.txt file1.txt
rm temp.txt
文件 temp.txt 如下所示:
\bA\b
\bB\b
\bE\b
接下来,我们将使用 temp.txt 文件作为搜索字词,并获得所需的结果。
答案 3 :(得分:0)
# This will grep the first column of file2.txt in file1.txt.
grep "`awk '{print $1}' file2.txt`" file1.txt
1 A bla 9232
1 B tesfs 3049
2 E eor 4042
# This will grep the first column of file2.txt in file1.txt.
grep "`cut -d' ' -f1 file2.txt`" file1.txt
1 A bla 9232
1 B tesfs 3049
2 E eor 4042