2015-12-18 57 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) –

相關問題