2016-04-01 38 views
0

2行のテキストファイルが2つあります。ファイル内の、他のファイルのテキストと一致しないすべての行を削除します。

file1の

2345678 sdfsdfsdfsf 10.00 dirfkdkfsdf XP 
2345679 sdfsdfsdfsf 10.00 dirfkdkfsdf XP 
2345680 sdfsdfsdfsf 10.00 dirfkdkfsdf XP 
2345681 sdfsdfsdfsf 10.00 dirfkdkfsdf XP 
2345682 sdfsdfsdfsf 10.00 dirfkdkfsdf XP 

FILE2

2345678 
2345679 

は、私はこれで終わる必要があります。 私は、ファイル内の2 例をテキストを持っていないファイル1内のすべての行を削除したいですin file1

2345678 sdfsdfsdfsf 10.00 dirfkdkfsdf XP 
2345679 sdfsdfsdfsf 10.00 dirfkdkfsdf XP 

私はbashスクリプトでこれを行う必要があります。 sed、awk、何でも。 私はこれを試してみましたが、file1の

awk 'NR==FNR{a[$0];next} !($0 in a)' file2 file1 

内のすべてのレコードは、ファイルのみがすでにキーでソートされている場合、これは標準であるFILE2

awk 'NR!=FNR{a[$0];next} !($0 in a)' file2 file1 

答えて

2

を印刷し

プリントを動作しません。溶液

$ join file1 file2 

2345678 sdfsdfsdfsf 10.00 dirfkdkfsdf XP 
2345679 sdfsdfsdfsf 10.00 dirfkdkfsdf XP 

はこれより簡単にはなりません。

あなたがawkソリューションをしたい場合は、これはそれ

$ awk 'NR==FNR{a[$1];next} $1 in a' file2 file1 

2345678 sdfsdfsdfsf 10.00 dirfkdkfsdf XP 
2345679 sdfsdfsdfsf 10.00 dirfkdkfsdf XP 
+0

こんにちは、awkはうまくいきますが、最初の列の代わりにfile1の3列の一致をfile2からキャッチしたいのですか? –

+0

これは異なる入力/出力で異なる質問になります。結合バージョンについては、 '-j 3'を指定し、' awk'に '$ 3'を' $ 3'に変更する必要があります – karakfa

0

なぜawkでしょうか?代わりにgrepを使用してください:

+0

grepはこの作業には良いとは思わない – Kent

+0

'grep'に対する引数はありますか? – rush

+0

ok、たとえば私は行があります: 'sdfsdfsdfsf 2345678 10.00 dirfkdkfsdf XP' – Kent

関連する問題