1

2 つのファイルを検索して文字列のリストを返すシェル スクリプトが必要です。

ファイル A には、次のように、一意の英数字文字列のリストが 1 行に 1 つずつ含まれています。

accc_34343
GH_HF_223232
cwww_34343
jej_222

ファイル B には、これらの文字列の一部 (2 回以上) のリストと、次のような情報の 2 番目の列が含まれています。

accc_34343 dog
accc_34343 cat
jej_222 cat
jej_222 horse

ファイル B にないファイル A の文字列のリストを含む 3 番目のファイルを作成したいと思います。

grep -v でいくつかのループを使用しようとしましたが、うまくいきません。したがって、上記の例では、新しいファイルの内容は次のようになります。

GH_HF_223232
cwww_34343

どんな助けでも大歓迎です!

4

3 に答える 3

2

できることは次のとおりです。

grep -v -f <(awk '{print $1}' file_b) file_a > file_c

説明:

  • grep -v:-vオプションを使用しgrepて、マッチングを反転します
  • -f:-fオプションを使用grepして、パターンがファイルからのものであることを指定します
  • <(awk '{print $1}' file_b):一時ファイルを使用せず<(awk '{print $1}' file_b)に最初の列の値を単純に抽出することです。構文はfile_bプロセス置換です。<( ... )
  • file_a:grep検索するファイルがfile_a
  • > file_c: 書き込む出力file_c
于 2013-01-04T22:15:32.203 に答える
1

commファイル間の交差点と相違点を見つけるために使用されます。

comm -23 <(sort fileA) <(cut -d' ' -f1 fileB | sort -u)

結果:

GH_HF_223232
cwww_34343

あなたのシェルはbash/zsh/kshだと思います

于 2013-01-05T00:40:08.240 に答える
0
awk 'FNR==NR{a[$0];next}!($1 in a)' fileA fileB

ここをチェック

于 2013-01-05T15:27:48.587 に答える