我的 shell 技能有点生疏,但我想做的是获取 2 个文件,并根据匹配字段从另一个文件中“删除”一个文件。这是重要的部分,该行的其余部分可以不同,但如果关键字段匹配,它将被删除。例如,我的文件是管道分隔的,第二个字段是关键字段。
File 1
------
acme|widg001|green|plant a|<timestamp>
acme|widg102|blue|plant b|<timestamp>
acme|widg002|yellow|plant a|<timestamp
File 2
------
acme|widg001|blue|plant a|<timestamp>
acme|widg701|blue|plant a|<timestamp>
当我从文件 1 中删除文件 2 时,我希望生成的文件包含的是
New File
------
acme|widg102|blue|plant b|<timestamp>
acme|widg002|yellow|plant a|<timestamp>
理想情况下,该解决方案允许我指定 2 个以上的文件,即从文件 1 中删除文件 2、3 和 4。
任何帮助都会很棒!
最佳答案
既然您要求使用 Bash,我决定只使用 Bash 试试看。完全没有外部程序。
IFS='|'
declare -A scrub
while read f1 f2 rest; do
scrub[$f2]=0
done < file2.txt
while read f1 f2 rest; do
if [ ! ${scrub[$f2]} ]; then
echo "$f1|$f2|$rest"
fi
done < file1.txt
这会首先缓存要删除的值,然后遍历第一个文件中的候选值,打印那些未删除的值。它不漂亮,但它是 Bash。
关于linux - 从 shell 中清理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18104971/