私のパターンに対応する他の単語を含むファイルがあります。
テキスト.TXT
842
897
907
967
995
1065
1095
word.txt一致時に削除したい行を含むその他のファイル
816.42743 9246.4688
832.41711 8867.3076
842.51001 23988.459
859.42639 5776.8726
870.53418 5992.9668
875.41742 6930.3584
877.43384 35639.199
885.51709 60137.957
891.41595 5480.983
したがって、新しいパディングはパターンの単語に一致する3行を削除する必要があります842
。
最終ファイルは次のようにする必要があります。
816.42743 9246.4688
832.41711 8867.3076
859.42639 5776.8726
870.53418 5992.9668
875.41742 6930.3584
877.43384 35639.199
885.51709 60137.957
891.41595 5480.983
ドットの前の数字だけを認識するには、単語のパターン(word.txt)も必要です。ありがとうございます。明確に説明できたらと思います。
答え1
方法を使うGNU awkマニュアルに入ることをお勧めしますファイル分析:
awk -F '.' 'pass == 1 {seen[$0]}
pass == 2 && !($1 in seen)' pass=1 words.txt pass=2 file
まず、各行($0
)をwords.txt
連想配列のキーとして保存しますseen
。
2番目のパスでは、file
最初のフィールド($1
)が存在しない行のみを印刷しますseen
。
-F '.'
フィールド区切り記号(FS
)をリテラルポイントに設定します。
出力:
816.42743 9246.4688
832.41711 8867.3076
859.42639 5776.8726
870.53418 5992.9668
875.41742 6930.3584
877.43384 35639.199
885.51709 60137.957
891.41595 5480.983
答え2
awk -F'.' 'NR==FNR{a[$1]; next} !($1 in a)' words.txt file2
答え3
grepを使用できますが、「前にドット」要件を適用するには他のツールが必要です。
grep -v -w -f <(sed 's/^/^/' words.txt) file2
- grepはパターンを含むファイルをインポートできます。
-f
- しかし、私たちは数値ファイルを正規表現に変換したいので、プロセスをsedに置き換えます。
- 単語全体を一致させたい。
-w
- そして、あなたは一致をキャンセルしたいと思います:
-v