例如,我们有内容
001
002
004
008
010
在名为 的文本文件中file
,如何提取丢失的内容3 5 6 7 9
?
答案1
一个awk
办法:
$ awk 'NR != $1 { for (i = prev + 1; i < $1; i++) {print i} } { prev = $1 + 1 }' file
3
5
6
7
9
更清楚:
awk 'NR != $1 {
for (i = prev + 1; i < $1; i++) {
print i
}
}
{
prev = $1
}'
对于每一行,我检查行号是否与数字匹配,如果不匹配,则打印前一个数字 ( prev
) 和当前数字之间的每个数字(不包括 ,因此i = prev + 1
)。
答案2
我的方法是控制数字的大小,因为我将初始化两个变量:开始和结束限制并将开始限制附加到文件名,无限循环,比较开始结束限制,如果开始数字大于结束数字则退出,检查文件是否存在并增加起始限制。
StartNumber=$1
EndNumber=$2
while true; do
[ ${StartNumber} -gt ${EndNumber} ] && { exit 0 ; }
if [ ! -f ${FileName}_${StartNumber} ]; then
echo ${StartNumber}
fi
((StartNumber+=1))
done
根据您的评论提出几点建议:
- 尝试运行 find 命令
find . -type f
并循环遍历结果。 - 对于每个文件,上述命令生成的应用
echo ${filename} | tr -dc 0-9
仅用于获取数字。 - 您可能会得到“yyyyddd”,使用它作为起始限制,并将其与今天的日期作为结束限制进行比较。
答案3
假设使用您的示例文件,以下命令
join -a 1 -o 1.1 2.1 -e missed <(seq -f '%03g' $(tail -1 <(sort file))) file | grep missed
将产生这个输出
003 missed 005 missed 006 missed 007 missed 009 missed
如果这就是您需要的,我可以提供一些解释