1-е решение: с использованием match
функции awk
.Он будет выводить в порядке от буквы A к B в соответствии с показанными примерами OP.
awk '
match($0,/A[0-9]+/){
val=substr($0,RSTART,RLENGTH)
if(val && match($0,/B[0-9]+/)){
print val,substr($0,RSTART,RLENGTH)
}
}' Input_file
2-е решение: Это решение будетне заботятся о буквах A и B, поэтому в том порядке, в котором они располагаются, они будут отображаться в том же порядке.
awk '
{
for(i=1;i<=NF;i++){
if($i ~ /A[0-9]+/ || $i ~ /B[0-9]+/){
val=val?val OFS $i:$i
}
}
if(val ~ /A[0-9]+/ && val ~ /B[0-9]+/){
print val
}
val=""
}
END{
if(val ~ /A[0-9]+/ && val ~ /B[0-9]+/){
print val
}
}' Input_file
3-е решение: , учитывая, что они нужны в порядке от A до B на выходе, тогда может помочь следующее:
awk '
{
for(i=1;i<=NF;i++){
line=$i
sub(/[0-9]+/,"",line)
if($i ~ /A[0-9]+/ || $i ~ /B[0-9]+/){
array[tolower(line)]=$i
}
}
if(array["a"] ~ /A[0-9]+/ && array["b"] ~ /B[0-9]+/){
print array["a"],array["b"]
}
delete array
}
END{
if(array["a"] ~ /A[0-9]+/ && array["b"] ~ /B[0-9]+/){
print array["a"],array["b"]
}
}' Input_file
ПРИМЕЧАНИЕ: Добавление информации из man awk
документация по используемым функциям, например -> match
, tolower
, RSTART
и RLENGTH
match (s, r [, a]) Возвращает позицию в s, гдевстречается регулярное выражение r или 0, если r отсутствует, и задает значения RSTART и RLENGTH.Обратите внимание, что порядок аргументов такой же, как и для оператора ~: str ~ re.Если указан массив a, a очищается, а затем элементы с 1 по n заполняются частями s, которые соответствуют соответствующему заключенному в скобки подвыражению в r.0-й элемент a содержит часть s, совпадающую со всем регулярным выражением r.Подскрипты a [n, "start"] и a [n, "length"] предоставляют начальный индекс в строке и длине соответственно каждой соответствующей подстроки.
RSTART Индекс первого символасоответствует match ();0 если нет совпадений.(Это означает, что индексы символов начинаются с единицы.)
RLENGTH Длина строки, совпадающей с match ();-1, если совпадения нет.
tolower (str) Возвращает копию строки str, в которой все символы в верхнем регистре в str транслируются в соответствующие им символы нижнего регистра.Неалфавитные символы остаются без изменений.