# awk_scr
BEGIN {
# clear the output file if it already exists
# you can do this using your shell instead
ORS = ""
print "" > "final.txt"
ORS = "\n"
}
/missing/ {
# delete all characters prior to the last occurrence of "missing:"
# this assumes that there is only one sub-string "missing:" per line
sub(/.*missing:/, "missing:", $0)
# append the updated line to the output file
print $0 >> "final.txt"
}
Затем запустите awk -f awk_scr ERR.txt && cat final.txt
.
Другим решением является использование sed
, которое короче:
sed 's/^.*missing:/missing:/' ERR.txt | tee final.txt
Однако у него есть тот же недостаток, что и у awk-решения :— предполагается, что в каждой строке встречается только одно вхождение «отсутствует :». Это связано с тем, что и awk
, и sed
совпадают только жадно.
Чтобы имитировать ленивое сопоставление, вы можете сделать следующее, вместо (что лучше):
sed -E 's/(missing)(.*)|./\1\2/g' ERR.txt | tee final.txt