![如何删除文本文件中标记的相同行](https://linux22.com/image/858153/%E5%A6%82%E4%BD%95%E5%88%A0%E9%99%A4%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E4%B8%AD%E6%A0%87%E8%AE%B0%E7%9A%84%E7%9B%B8%E5%90%8C%E8%A1%8C.png)
我想删除文本文件 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