4

目標:1より上で-1より下のデータのみを出力する

また

1〜-1の出力データ

私はawkの基本を持っており、列2(私のデータがある場所)を印刷できます。また、0から1の範囲を指定しました。

awk '/[0-1]/  {print $2}' test.dat

行番号も必要なので、NRを追加しました...

awk '/[0-1]/  {print $2 NR}' test.dat

明確にするために、重要なのは、データのどの行が許容範囲外であるかを特定することです。これにより、分析ではそれらを無視できます。(つまり、1より大きいか-1より小さいものは、あまりにも大きな変化です)。

あなたが提供できるどんな助けも素晴らしいでしょう。以下にサンプルデータを貼り付けました。

http://pastebin.com/7tpBAqua

4

2 に答える 2

7

すべての列のデータを評価する必要があるかどうか、またはテストする必要がある特定の列があるかどうかは不明です。1 つの列をテストするのが最も簡単です。複数またはすべての列をテストすることは、パターンのかなり単純な反復拡張です。具体的には列 2 に言及しているため、列 2 が -1 と 1 の間にある場合にのみ列 2 を印刷するとします。

awk -F, '($2 >= -1) && ($2 <= 1) { print $2 }'

代わりに、フィールドが 1 より大きいか -1 より小さいかをテストするには:

awk -F, '($2 <= -1) || ($2 >= 1) { print $2 }'

別のフィールドを印刷するか、代わりに行全体 ( $0) を印刷することは、かなり明白なはずです。各フィールドを調べるに($2 >= -1) && ($2 <= 1) { print $2 }は、関心のある各フィールドの句全体を単純に繰り返すか (すぐに冗長になります)、次のようにします (テストされていません)。

awk -F, '{ for (i = 1; i <= NF; ++i) if (($i >= -1) && ($i <= 1)) print $i; }'
于 2012-10-29T18:02:38.363 に答える
3
awk -F'[ ,]' 'NR>2{for (i=2;i<=NF;i++) if ($i<-1 || $i>1) { print NR; next } }' file
于 2012-10-29T19:06:58.220 に答える