grep
を使用してファイルから数字を抽出しました.1 2 3 5 6 11 18
とします。ミスを1..20
にするには、ファイルに入れてcomm
を使って比較します。シーケンス中に欠けている数字を抽出する
1
10
11
12
13
14
15
16
17
18
19
2
20
3
4
5
6
7
8
9
を出力
a='1 2 3 5 6 11 18'
printf '%d\n' $a | sort -u > 111
printf '%d\n' {1..20} | sort -u > 222
comm 111 222
rm 111 222
は、ファイルに保存せずに、より便利な方法はありますか?
[プロセス置換](http://mywiki.wooledge.org/ProcessSubstitution): 'comm <(printf '%d \ n' $ a | sort -u)<(printf '%d \ n' {1 ..20}) 'サイドノート:' {1..20} 'の場合、ソートは必要ありません。彼らはすでに分類されています。 – anishsane
^^そう言えば、純粋なbashの亜種は簡単に書くことができます: 'a = '1 2 3 5 6 11 18'; $ aのxのために; do [$ x] = 1;完了しました。 for((x = 1; x <= 20; x ++)); do((t [i]))||エコー$ i; done' – anishsane
ありがとう@anishsane。しかし、2行目はヌルラインを出力します。最初のものは 'ソート'が必要です。 '1 2 3 4 ... 10 ... 20'はソートされているとはみなされませんが、' 1 10 11 ... 2 20 3 ... 'はソートされていません。 – Lee