击。交叉与2个文件

时间:2016-05-30 10:04:05

标签: bash

我有一个包含2列数据的大文件和一个包含3列数据的第二个大文件。我想基于第一个文件从第二个文件中提取第3列。这意味着如果我有以下第一个文件:

A B
C V

和第二个:

A B 3
C V 4
B G 6

我应该进入输出文件:

A B 3
C V 4

是否可以使用shell脚本?

3 个答案:

答案 0 :(得分:0)

您可以使用AWK执行此操作:

% awk 'NR == FNR {a[$0] = 1; next}a[$1 FS $2]' file1 file2
A B 3
C V 4

故障:

NR == FNR { # Run block for file1 only
  a[$0] = 1 # Store line in associative array
  next      # Skip next block
}
a[$1 FS $2] # Print lines from file2 if they are in associative array
            # Same as writing a[$1 FS $2] { print $0 }

grep的另一种方法是:

grep -f file1 file2

将尝试将file1中的每一行与来自file2的行匹配。但这不会在字符串的开头开始搜索。

答案 1 :(得分:0)

您也可以使用grep命令实现相同的功能。但可能需要更长时间。

$ cat file1.txt
A B
C V
$ cat file2.txt
A B 3
B G 6
C V 4
$

以下是相同的grep版本:

$ while read line ; do grep "^$line" file2.txt ; done < file1.txt
A B 3
C V 4
$

答案 2 :(得分:0)

简单的int count = 0; for (Row row : sheet) { if (row.getCell(5) != null) { count += 1; } } cat组合可以在我的zsh中使用。

grep

cat 2.txt | grep "$(cat 1.txt)"
  

A B 3

     

C V 4