awk выберите часть столбца (3 из 3 символов) - PullRequest
0 голосов
/ 27 августа 2018

У меня есть несколько файлов, в которых я выбираю несколько столбцов со следующими

cat test.txt | awk ' {
if ($11 ~ /229/ && $5 ~ /1A1/) 
{print $0, ($3 + 1) }         
if ($11 ~ /229/ && $5 ~ /1A2/) 
{print $0, ($3 - 1) }
if ($11 ~ /49/ && $5 ~ /1A1/)  
{print $0, ($3 - 1)}
if ($11 ~ /49/ && $5 ~ /1A2/)
{print $0, ($3 + 1) }
}' > output

Проблема в том, что некоторые файлы могут иметь разные буквы для 1A1 или 1A2, например 1K1,1K2 ..... Я хотел бы сделать условие $5 ~(/1A2/) or $5 ~(/1A1/) более "общим", и я попробовал что-то вроде

$5 ~(/??1/)
$5 ~(/??2/)

Пока что безуспешно.Может ли кто-нибудь помочь мне в этом?Обратите внимание, что мне нужно сохранить также критерии отбора в $ 11

cat test.txt | awk ' {
    if ($11 ~ /229/ && $5 ~ /??1/)
....

1 Ответ

0 голосов
/ 27 августа 2018

Вы должны попробовать с регулярными выражениями, в этом случае вы можете использовать эту простую awk программу:

awk ' {
if ($11 ~ /(229|49)/ && $5 ~ /1[A-Z][1-2]/) 
{print $0, ($3 + 1) }}' test.txt > output

Я предполагаю, что:

  • Второй символ в$5 - это любая заглавная / майская буква ([A-Z]),
  • Третий символ в $5 равен 1 или 2 ([1-2])
  • $11может быть 229 или 49
...