我需要搜索file1中的每一个字符串,然后在file2中用一个字符串来替换这个字符串。
xargs -l1 -- sh -c '...
node1
node2
Why use a convoluted
node1
node2
node3
node4
cat ~/backup/file1.log | xargs -l1 -- sh -c 'sed -i "s/$1/done/g" ~/backup/file2.log' -- > ~/backup/file3.log
file2
done
done
node3
node4
预期输出文件3
prints nothing in file3
实际产量团队,我需要搜索file1中的每个字符串,然后在file2中用一个字符串替换file1 node1 node2 file2 node1 node2 node3 node4 cat ~backupfile1.log。sed
循环,而你可以在 xargs
? 最糟糕的是,你的命令对第一个文件中的每一个新条目都进行新的文件IO。awk
你的
awk 'FNR == NR { lines[$1]; next } $1 in lines { $0 = "done" }1' f1 f2 > f3
命令的作用是将第一个文件中的所有行标记为 awk
数组,然后在查找第二个文件 lines
将匹配第二个文件中那些行内容在 $1 in lines
数组。如果是这样,请将当前行修改为 lines
并打印出来 "done"
或默认打印非匹配行的行。{..}1
的
可改为 $1 in line
只要你是按 "整行 "匹配两个文件中的内容就可以了。对于具体的列位匹配要拼出实际的列位。$0 in line