다음을 나타내는 필드로 구분된 파일이 있습니다 "|"
.
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