我有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