2015-12-18 27 views
0

我有了整数列一个文件 - >文件1如何删除一个文件的第一个值没有出现在另一个文件中的行?

1 2 3 
2 2 2 
3 2 1 
3 1 4 
4 1 4 
5 0 0 

我有一个的(唯一的)整数单列另一个文件 - >文件2

1 
3 
4 

这两个文件都非常大。我想删除File1的第一列值不出现在File2中的行。

1 2 3 
3 2 1 
3 1 4 
4 1 4 
+1

这可以用'awk'轻松完成。请显示你的尝试。 – Barmar

+0

我还没有尝试过任何东西,因为我不确定从哪里开始。 – pmdaly

+0

首先将'File2'读入数组。然后在读取'File1'时,如果数组中没有列,请打印该行。 – Barmar

回答

1

您可以通过File1行循环,从每行中提取第一个数字并尝试查找与File2中的数字完全匹配。

#!/bin/bash 

IFS=$'\n' 
re='^[0-9]+$' 

for i in $(cat File1); do 
    num=$(echo $i | awk '{print $1}') 
    grp=$(grep "^${num}\b" File2) 
    if [[ $grp =~ $re ]] ; then 
     echo $i 
    fi 
done 

您可以将此脚本的输出保存在一个临时文件中,并使用它来覆盖原始File1。

+1

[不要用'for'读取文件的行](http://mywiki.wooledge.org/DontReadLinesWithFor) –

相关问题