누구든지 이것을 뒤집는 방법을 알고 있습니다.
FX_AM140_EML AM140
Backend/aa.java
Backend/bb.java
Backend/cc.java
Backend/dd.java
Backend/ee.java
FX_AM172_EML AM172
Backend/aa.java
Backend/bb.java
이에?
FX_AM140_EML AM140 Backend/aa.java
FX_AM140_EML AM140 Backend/bb.java
FX_AM140_EML AM140 Backend/cc.java
FX_AM140_EML AM140 Backend/dd.java
FX_AM140_EML AM140 Backend/ee.java
FX_AM172_EML AM172 Backend/aa.java
FX_AM172_EML AM172 Backend/bb.java
답변1
with 와 같은 것이 awk
그 일을 할 것입니다:
awk '/^FX/ {a=$0;next} /^Backend/ {print a,$0}' <input file>
여기서는 헤더 줄이 다음으로 시작 FX
하고 다른 줄은 다음으로 시작한다고 가정합니다.Backend
답변2
또 다른 awk
접근 방식은 빈 줄로 구분된 줄 집합의 첫 번째 줄을 접두사로 처리합니다.
awk '
$0 == "" {prefix = ""; next}
prefix == "" {prefix = $0; next}
{print prefix, $0}'
답변3
펄 제안. 이 변형의 드라이버는 빈 줄로 구분된 줄 집합입니다.
perl -ne '
BEGIN {$/ = "\n\n"}
($p, @a) = split("\n");
print "$p $_\n" foreach @a;
' datafile
여러 줄로 작성하면 더 읽기 쉽지만 한 줄로 압축할 수 있습니다( 단락 모드도 전환하는 BEGIN
for 절 -00
을 바꿨습니다).
perl -00 -ne '($p, @a)=split("\n"); print "$p $_\n" foreach @a' datafile
이에 상응하는 내용 awk
은 다음과 같습니다(간단한 연결을 통해 한 줄로 압축할 수도 있음).
awk -v RS= '
{
split($0, a, "\n");
p=a[1]; delete a[1];
for (f in a) {
print p, a[f]
}
}
' datafile
레코드 구분 기호( RS
)를 빈 문자열로 설정하면 단락 모드(POSIX을 검색한 다음 'RS가 비어 있는 경우")
산출
FX_AM140_EML AM140 Backend/aa.java
FX_AM140_EML AM140 Backend/bb.java
FX_AM140_EML AM140 Backend/cc.java
FX_AM140_EML AM140 Backend/dd.java
FX_AM140_EML AM140 Backend/ee.java
FX_AM172_EML AM172 Backend/aa.java
FX_AM172_EML AM172 Backend/bb.java
답변4
Perl 메소드는 이를 포함하지 않는 행을 /
다른 행의 접두어로 사용합니다.
$ perl -lne 'if(/^(.[^\/]+)$/ || /^$/){ $k=$1; next} print "$k $_"' file
FX_AM140_EML AM140 Backend/aa.java
FX_AM140_EML AM140 Backend/bb.java
FX_AM140_EML AM140 Backend/cc.java
FX_AM140_EML AM140 Backend/dd.java
FX_AM140_EML AM140 Backend/ee.java
FX_AM172_EML AM172 Backend/aa.java
FX_AM172_EML AM172 Backend/bb.java