我有2個文件fileA和fileB。如果另一個文件中的同一行匹配模式,則刪除行
的fileA包含:
71
32
23
10
...
和FILEB包含:
ok
no
no
ok
...
我想要做的就是刪除線的fileA如果FILEB同一行匹配 '不'。 所以,最終的fileA想:
71
10
...
任何命令或bash腳本或者vim能做到這一點?
我有2個文件fileA和fileB。如果另一個文件中的同一行匹配模式,則刪除行
的fileA包含:
71
32
23
10
...
和FILEB包含:
ok
no
no
ok
...
我想要做的就是刪除線的fileA如果FILEB同一行匹配 '不'。 所以,最終的fileA想:
71
10
...
任何命令或bash腳本或者vim能做到這一點?
下面是一個簡單的一行是應該做的技巧:
sed "$(awk '/no/{print NR"d"}' fileB)" fileA
你在哪裏把你的正則表達式匹配在你看到上面的單詞「否」的地方。
它的工作原理是用awk掃描第一行,然後打印行號,後面跟着匹配符所在的字母「d」。這種nd
的模式是一個sed命令,用於刪除輸入流的第n行。
該版本不會修改fileA的內容,但會打印將行刪除到stdout的結果。使用sed的-i標誌修改文件:
sed -i "$(awk '/no/{print NR"d"}' fileB)" fileA
你可以用糨糊把線路和while循環遍歷它們:
while read -r a_input b_input; do
[[ $b_input == "ok" ]] && echo "$a_input"
done < <(paste -d' ' fileA fileB)
用awk的完整性:
awk '$2 == "ok" { print $1 }' < <(paste -d' ' fileA fileB)
我證實了你的答案也有效,但你能解釋它嗎? – shilk