использование grep для определенных строк в текстовых файлах

Этот узел устанавливает последний узел v0.12. * из nodeource.

sudo apt-get install -y curl
curl -sL https://deb.nodesource.com/setup_0.12 | sudo bash -
sudo apt-get install -y nodejs

Для узла v4.x

curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
sudo apt-get install -y nodejs
1
задан 17 August 2016 в 13:47

2 ответа

Быстрый слот:

$ awk '$5 == '0' || $5 == '15' ||  $5 == '30' ||  $5 == '45' {print}' test.txt

Как упоминается в комментариях ниже, и еще быстрее один лайнер:

$ awk '$5 ~ /^(0|15|30|45)$/' test.txt

Синтаксис пояснил: [!d2 ]

$5  - the desired column from the text.
~   - the match symbol... matching was between the two slashes (/).
^/$ - the regex symbols indicating the beginning and end of the field.
|   - the or specifier for either item in the "()" group.

Заголовок отфильтровывается, только принимая строки, соответствующие элементам, соответствующим критериям соответствия ~.

4
ответ дан 23 May 2018 в 07:04
  • 1
    print является действием по умолчанию в awk, когда что-то есть True. Поэтому вы можете просто отказаться от него. Тогда вы можете сказать файл awk '$5 ~ /^(0|15|30|45)$/' или поиграть с !($5%15). – fedorqui 17 August 2016 в 16:58
  • 2
    Большой! Я добавлю его в форматированный ответ выше. – L. D. James 17 August 2016 в 18:56

Он отлично работает в grep, хотя awk - это инструмент для разделения полей.

С grep:

grep -E '^10[[:blank:]]+([^[:blank:]]+[[:blank:]]+){3}(0|15|30|45)[[:blank:]]' file.txt
] Соответствие 10 в начале, ([^[:blank:]]+[[:blank:]]+){3} соответствует следующим трем полям, а затем соответствует 5-му полюсу для желаемых

Если вы используете PCRE (-P), вы можете заменить [:blank:] на \s, хорошо смотрится на глазах:

grep -P '^10\s+([^\s]+\s+){3}(0|15|30|45)\s' file.txt     

Пример:

$ cat file.txt                                        
    2              METEOROLOGICAL DATA                         VERSION /      
    8    PR    TD    HR    ZW    ZT    WD    WS    RI      # / TYPES OF   MOD/TYPE/ACC 
 3979316.8350  1050313.7180  4857065.7030      592.1910 PR SENSOR POS XYZ/H           
                                                           END OF HEADER 
10  1  1  0  0 15  927.9    4.3   99.1                
10  1  1  0  1 15  927.9    4.3   99.1                
10  1  1  0  2 15  927.9    4.3   99.1                
10  1  1  0 15 15  927.9    4.2   99.1               
10  1  1  0 16 15  927.9    4.2   99.0                
10  1  1  0 30 15  927.7    4.1   99.1                
10  1  1  0 31 15  927.7    4.1   99.1                
10  1  1  0 45 15  927.5    4.1   99.1                
10  1  1  0 46 15  927.5    4.0   99.1                
10  1  1  1  0 15  927.4    4.1   99.1                
10  1  1  1  1 15  927.4    4.1   99.1    

$ grep -E '^10[[:blank:]]+([^[:blank:]]+[[:blank:]]+){3}(0|15|30|45)[[:blank:]]' file.txt
10  1  1  0  0 15  927.9    4.3   99.1                
10  1  1  0 15 15  927.9    4.2   99.1               
10  1  1  0 30 15  927.7    4.1   99.1                
10  1  1  0 45 15  927.5    4.1   99.1                
10  1  1  1  0 15  927.4    4.1   99.1                

$ grep -P '^10\s+([^\s]+\s+){3}(0|15|30|45)\s' file.txt                         
10  1  1  0  0 15  927.9    4.3   99.1                
10  1  1  0 15 15  927.9    4.2   99.1               
10  1  1  0 30 15  927.7    4.1   99.1                
10  1  1  0 45 15  927.5    4.1   99.1                
10  1  1  1  0 15  927.4    4.1   99.1        
3
ответ дан 23 May 2018 в 07:04

Другие вопросы по тегам:

Похожие вопросы: