私文書一部の欠落データポイントの値があり、欠落している値はと表示されます****
。 10未満の値を持つ7つの連続した列を持つ行を選択する必要があります。私が走るときスクリプト****
また、連続列に対応する行を提供します。
****
すべてをより高い値に置き換えることで、簡単に問題を解決できます。しかし、入力ファイルを変更したくありません。私のスクリプトが****
数字(より大きい)として扱うように何かをしたいと思います10 i.e. str=****=100
。どうすればいいですか?
入力例consecutive7pointDown10.input
-
2 3 4 5 6 7 8 0 12 14 23
2 3 4 12 6 7 8 0 1 2 23
**** **** **** **** **** **** **** 8 **** **** 12
私のスクリプトの結果consecutive7pointDown10.output
-
2 3 4 5 6 7 8 0 12 14 23
**** **** **** **** **** **** **** 8 **** **** 12
ただし、予想出力
2 3 4 5 6 7 8 0 12 14 23
私のスクリプトconsecutive7pointDown10
は次のとおりです -
#!/bin/bash
########################################################################################################################
# This script results rows having at most 10°C in consecutive at most 7 points.
# input = scriptname.input
# output = scriptname.output
########################################################################################################################
input=`basename "$0"`.input
output=`basename "$0"`.output
awk '{
for(i=4;i<=34-6;i++)
{
if($i<=10 && $(i+1)<=10 && $(i+2)<=10 && $(i+3)<=10 && $(i+4)<=10 && $(i+5)<=10 && $(i+6)<=10)
{
print
next
}
}
}' $input > $output
ベストアンサー1
awk '/(\<[0-9]\s+){7}/{print}' input.txt
または
sed -rn '/(\b[0-9]\s{1,}){7}/p' input.txt
仕事をします。
awkの説明(sedのロジックは同じ):
/(\<[0-9]\s+){7}/{print}
- パターンを含む行を印刷します。\<
- 単語の境界と一致します。つまり、右側の文字が「単語」文字で、左側の文字が「非単語」文字の場合は一致します。[0-9]\s+
0
- に1桁の数字9
、その後に1つ以上のスペースが続きます。(\<[0-9]\s+){7}
-\<[0-9]\s+
パターンが7回繰り返されると一致します。
入力する
2 3 4 5 6 7 8 0 12 14 23
2 3 4 12 6 7 8 0 1 2 23
**** **** **** **** **** **** **** 8 **** **** 12
出力
2 3 4 5 6 7 8 0 12 14 23
編集する:
精度が1の浮動小数点数(9.2、8.1、7.5など)の場合。
awk '/(\<[0-9]\.[0-9](\s+|$)){7}/{print}' input.txt