我想删除文本文件 B 中混乱的选定相同行。在文件 A 中,相同的行在行首用 % 标记标记。如何通过命令行实现这一点。
例如:
file A contents AAA - 789 BBB - 456 % CCC - 980
file B contents AAA - 789 CCC - 980 BBB - 456
想要删除文件 B 中的 CCC-980。
答案1
使用终端中的命令,
sed -n '/^%/p' fileA.txt | awk '{print substr($0,3)}' > tmp.txt
grep fileB.txt -vf tmp.txt > modified_file.txt
rm tmp.txt
该文件modified_file.txt
包含您想要的结果。您也可以在 shell 脚本中使用这些命令。
怎么运行的:
sed -n '/^%/p' fileA.txt
输出是,% CCC - 980
sed -n '/^%/p' fileA.txt | awk '{print substr($0,3)}'
生成CCC - 980
,您要删除它。我已tmp.txt
使用重定向将其存储在其中,以便它可以与多条线路一起工作。grep fileB.txt -vf tmp.txt
给出 fileB 中不包含在 中的部分tmp.txt
。最后将其存储在modified_file.txt
建议的替代智能方法阿维纳什·拉杰:
awk -v var=$(awk '$1=="%"{print $2}' fileA.txt) '$1==var{next;}1' fileB.txt