我有2个文件,fileA和fileB。
fileA包含:
71
32
23
10
...
和fileB包含:
ok
no
no
ok
...
如果fileB中的同一行匹配'no',我想要删除fileA中的行。 因此得到的文件A希望:
71
10
...
任何命令或bash脚本或vim都可以这样做?
答案 0 :(得分:2)
您可以使用粘贴来连接线条和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)
答案 1 :(得分:2)
这是一个快速的单行应该做的伎俩:
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