Linux
帶有 vfF 的 grep 的 sed 或其他等效項
RHEL6.10 , gnu grep 2.2
grep -vfF stem.txt source.txt > filteredoutput.txt
stem.txt
具有唯一的 13 位數字。
source.txt
是固定長度 (400) 數據文件,其中 13 位欄位值從位置 225 開始。欄位值在文件中是唯一的。在這兩種情況下,換行符都是行分隔符。
source.txt
有大約 80k 行,stem.txt
大約 4.5k但是,我的輸出文件有大約 75k 行,這意味著它的過濾比干文件中的多。
我不知道為什麼會這樣。
在進行故障排除時,我用空格替換了除數字欄位之外的每一行中的所有其他內容
source.txt
,然後它給出了正確的結果。非常混亂的行為。
- 不知道我怎麼能弄明白?
- 我的其他選項是什麼 -sed /awk 等價物。
編輯:萬歲 grep!問題出在使用者/我身上。由於疏忽,我沒有考慮可能出現在源文件其他地方的 13 位特殊序列的可能性。帶有參數的 grep 命令按預期工作。
使用
awk
,確保您只在它們應該出現的地方尋找那些字元串。awk '!source {stem[$0]; next} ! (substr($0, 225, 13) in stem) ' stem.txt source=1 source.txt > filteredoutput.txt
(
substr()
起始位置是從 1 開始的)。這也將使其效率更高,因為它只需要每行進行一次雜湊查找,
source.txt
而不是 4.5k 子字元串查找。注意
grep -vfF stem.txt source.txt
是
grep -v -f F stem.txt source.txt
(查找文件中的任何正則表達式但不匹配的
stem.txt
行)。source.txt``F
你可能的意思是:
grep -vFf stem.txt source.txt
(查找
source.txt
不包含任何字元串的行stem.txt
)。