특정 필드에 awk 조건을 사용하지 마세요.

특정 필드에 awk 조건을 사용하지 마세요.

다음을 나타내는 필드로 구분된 파일이 있습니다 "|".

firstname|secondname|Kernel|Version|Year

예를 들어:

Linus|Torvald|VMLINUZ||1994
Jochen|Liedtke|L4|||
Apple||Darwin||2000

"\t"제한이 있고 조건이 거의 없는 결과를 원합니다 . 비어 있는 열이 있으면 으로 대체되지만 "-", 이름이나 두 번째 이름이 비어 있는 경우에는 상황이 복잡해집니다. 나는 이런 일이 일어나는 것을 원하지 않습니다.

간단히 말해서 이름과 두 번째 이름을 연결하되, 이러한 열 중 하나라도 비어 있으면 바꾸지 마십시오. "-"그렇지 않으면 이 조건이 다른 빈 필드에 적용됩니다.

나는 다음 awk 스크립트를 작성했지만 빈 이름이나 두 번째 이름도 대체합니다 "-".

BEGIN {
FS="|";
OFS="\t"
}
{ for (i = 1; i <= NF; ++i) sub(/^$/, "-", $i) }
{
print $5, $4, $2" "$1
}

다음과 같은 출력이 제공됩니다.

1994    -   Torvald Linus
-   -   Liedtke Jochen
2000    -   - Apple

그래서 마지막 줄은

2000    -   Apple

최종 출력

1994    -   Torvald Linus
-   -   Liedtke Jochen
2000    -   Apple

답변1

이것은 아마도 당신이 원하는 것입니다:

$ cat tst.awk
BEGIN { FS="|"; OFS="\t" }
{
    for (i=3; i<=NF; i++) {
        if ($i == "") {
            $i = "-"
        }
    }
    print $5, $4, ($2=="" ? "" : $2 " ") $1
}

$ awk -f tst.awk file
1994    -       Torvald Linus
-       -       Liedtke Jochen
2000    -       Apple

관련 정보