2つのファイルがあります。
$ cat file1
jim.smith
john.doe
bill.johnson
alex.smith
$ cat file2
"1/26/2017 8:02:01 PM",Valid customer,jim.smith,NY,1485457321
"1/30/2017 11:09:36 AM",New customer,tim.jones,CO,1485770976
"1/30/2017 11:14:03 AM",New customer,john.doe,CA,1485771243
"1/30/2017 11:13:53 AM",New customer,bill.smith,CA,1485771233
file1にないfile2のすべての名前を取得したいと思います。
以下は機能しません:
$ cut -d, -f 3 file2 | sed 's/"//g' | grep -v file1
jim.smith
tim.jones
john.doe
bill.smith
この場合、パイプのgrep -vが機能しないのはなぜですか?
ベストアンサー1
実際、これは私の最後のステップです。前の質問に答えるには。
-f
前に追加する場合:file1
grep
$ cut -d, -f3 file2 | grep -v -f file1
tim.jones
bill.smith
を使用すると-f
パターンがgrep
見つかりますfile1
。この機能がなければ、単にfile1
テキストモードで動作します。
以降を使用することもできます-F
。それ以外の場合、パターンの点は「すべての文字」として解釈されます。また、行全体が一致する-x
ように入力することもできます(一致しない行がある場合は便利です)。grep
joe.smith
joe.smiths
$ cut -d, -f3 file2 | grep -v -F -x -f file1
明らかに、これは行の末尾に末尾のスペースを必要としませんfile1
(質問テキストにあるようです)。
sed
出力にcut
が含まれていないため、これは必要ありません"
。また、必要すべてを削除する"
と、tr -d '"'
より良いツールになります。