2016-10-13 9 views
0

AWKを使用して列内の数字の連続したリストのギャップを見つけようとしました。私はthis questionが私と同じ要件を持っていることがわかりましたが、うまく動作することができませんでした。 私の入力はcsvにあり、次のようになります。AWKを使用してcsv列のギャップを見つける

aaa,bbb,ccc,ddd,eee,fff,ggg 
0,22,33,44,55,66,77 
1,88,99,11,12,13,14 
2,154,165,-22,-31,-40,-49 
3,220,231,-55,-74,-93,-112 
6,418,429,-154,-203,-252,-301 
7,484,495,-187,-246,-305,-364 
8,550,561,-220,-289,-358,-427 

私は

awk 'NR>1 && $1!=p+1{print p+1"-"$1-1}{p=$1}' file 

を試してみましたが、それは範囲が存在していても印刷を続けます。 私は0でなく1からの値を開始している可能性があると思っていましたが、回避策はほとんどありませんでしたが、それでも動作させることはできませんでした。

私は、例えば、この場合には は、すべてのヘルプははるかに高く評価されて

「4-5行方不明」、ギャップがある場合に警告を表示することを期待しています。

+1

期待される出力は? – anubhava

+0

あなたの説明が間違っているか、あなたの入力がCSVだとあなたの記述が間違っていますが、あなたの例にはカンマが含まれていません。あなたの質問を正確に修正してください。 –

+0

@エドモートン質問をCSVで更新しました。 Excelからデータをコピーしたとき、コンマは削除されていました。私の謝罪 –

答えて

0

(ここで参照スクリプトで正しく処理されない0、である)ヘッダと初期値の両方を処理するためのわずかなねじれを必要としますcsvファイルの最初の列に番号がありません:

awk -F, '{while (NR>2 && $1 > p+1) print ++p; p=$1} 1' file.csv 

aaa,bbb,ccc,ddd,eee,fff,ggg 
0,22,33,44,55,66,77 
1,88,99,11,12,13,14 
2,154,165,-22,-31,-40,-49 
3,220,231,-55,-74,-93,-112 
4 
5 
6,418,429,-154,-203,-252,-301 
7,484,495,-187,-246,-305,-364 
8,550,561,-220,-289,-358,-427 
+0

欠けている値だけを望むなら、 'awk -F、 '{while(NR> 2 && $ 1> p + 1)を使います。 p = $ 1} 'file.csv' – anubhava

+1

ありがとうございました。これはまさに私が探していたものです! –

+1

すべてが動作しません –

0

あなたはあなたの出力を取得するには、このawkコマンドを使用することができます

$ awk 'NR==1{p=$1-1; next} $1!=p+1{print p+1"-"$1-1} {p=$1}' file 

5-19 
+0

行方不明の範囲を印刷することを期待しています答えに感謝しますが、私のためには動作しません。私は有効なCSVで質問を更新しました。私はあなたに試してみます –

+0

$ awk 'NR == 1 {p = $ 1-1;次の} $ 1!= p + 1 {print p + 1 " - " $ 1-1} {p = $ 1} 'summary.csv 0--1 1-0 2-1 3-2 4-5 7-6 8-7 –

+0

複数のコメントにお詫び申し上げます。 「入力」を押すとコメントが送信されます。とにかく私はあなたの解決策を試してみると上記の出力を得ています –

関連する問題