たとえば、コンテンツがあります。
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
私のアプローチは、開始と終了の制限などの2つの変数を初期化し、開始制限をファイル名に追加し、無限に繰り返し、開始と終了制限を比較し、開始番号がファイル名より大きい場合に終了するため、数値のサイズを制御しますです。終了番号を確認するには、ファイルAの開始制限が存在し、増加していることを確認してください。
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
それが必要なら、私は説明することができます。