조건이 충족되면 라인을 역순으로 인쇄

조건이 충족되면 라인을 역순으로 인쇄

다음과 같은 파일이 있다고 가정해 보겠습니다.

John FRIEND_OF Jose
Aspirin INTERACTS_WITH Penicilin
Tree COEXISTS_WITH Grass
Andrew FIEND_OF Jane
John INTERACTS_WITH Paula

INTERACTS_WITH두 번째 필드가 or와 일치하면 행을 역순으로 인쇄해야 합니다 COEXISTS_WITH.

내 AWK 문장은 다음과 같습니다.

awk '{if ($2 == "INTERACTS_WITH" || $2 == "COEXISTS_WITH") print; print $3, $2, $1; next}1' test.txt

최종 출력은 다음과 같습니다.

Jose FRIEND_OF John
Aspirin INTERACTS_WITH Penicilin
Penicilin INTERACTS_WITH Aspirin
Tree COEXISTS_WITH Grass
Grass COEXISTS_WITH Tree
Jane FIEND_OF Andrew
John INTERACTS_WITH Paula
Paula INTERACTS_WITH John

그러나 위의 예처럼 각 조건을 개별적으로 지정하는 것은 지루한 일입니다(특히 조건이 더 많은 경우). 문자열 배열(예: ['INTERACTS_WITH', 'COEXISTS_WITH'])을 생성한 다음 두 번째 필드가 배열의 요소와 일치하면 해당 줄을 인쇄하는 방법을 알고 싶습니다 .

답변1

귀하의 입력/출력 예시는 기껏해야 혼란스럽기 때문에 실제로 무엇을 하려는지 모르겠습니다. 그러나 원하는 값을 문자열로 지정한 다음 이를 사용하여 작업을 수행하는 방법은 다음과 같습니다.

awk '
    BEGIN {
        rels = "INTERACTS_WITH COEXISTS_WITH"
        split(rels,tmp)
        for (i in tmp) {
            relSet[tmp[i]]
        }
    }
    { print }
    $2 in relSet {
        print $3, $2, $1
    }
' file

답변2

내가 가져가는 것이 가장 좋습니다 (행이 될 수 있습니다)

awk 'BEGIN { r["INTERACTS_WITH"]=1 ; r["COEXISTS_WITH"]=1} 
$2 in r {print $3,$2,$1 ; print ; next} 
{print}' ...

이것은 공간을 거의 절약하지 못합니다.

답변3

다음 스크립트를 완성하세요

awk '$2 ~ /INTERACTS_WITH|COEXISTS_WITH/ {$0=$3" "$2" "$1}1' filename

산출

John FRIEND_OF Jose
Penicilin INTERACTS_WITH Aspirin
Grass COEXISTS_WITH Tree
Andrew FIEND_OF Jane
Paula INTERACTS_WITH John

답변4

print필드 순서를 두 번 변경하면 얻을 수 있습니다 .{print $1, $2, $3}{print $3, $2, $1}

awk '/INTERACTS_WITH|COEXISTS_WITH/ {print $1, $2, $3}{print $3, $2, $1}' file

Jose FRIEND_OF John
Aspirin INTERACTS_WITH Penicilin
Penicilin INTERACTS_WITH Aspirin
Tree COEXISTS_WITH Grass
Grass COEXISTS_WITH Tree
Jane FRIEND_OF Andrew
John INTERACTS_WITH Paula
Paula INTERACTS_WITH John

또는 더 간결하게 말하면:

awk '/INTERACTS_WITH|COEXISTS_WITH/ {print $0}{print $3, $2, $1}' file

Jose FRIEND_OF John
Aspirin INTERACTS_WITH Penicilin
Penicilin INTERACTS_WITH Aspirin
Tree COEXISTS_WITH Grass
Grass COEXISTS_WITH Tree
Jane FRIEND_OF Andrew
John INTERACTS_WITH Paula
Paula INTERACTS_WITH John

관련 정보