2012-09-25 56 views

回答

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 
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) 
+0

我证实了你的答案也有效,但你能解释它吗? – shilk

相关问题