필드 수가 다른 행의 필드 결합

필드 수가 다른 행의 필드 결합

다음과 같은 입력이 주어졌습니다.

x y a b c t
p q w w t
a b c d
p q r

필드 3의 필드를 마지막 필드까지 연결하고 싶지만 마지막 필드는 포함하지 않고 싶습니다. 필드 3이 마지막 필드인 경우 자리 표시자를 삽입하고 싶습니다. 따라서 위의 입력이 주어지면 이것이 선호되는 출력입니다.

x y a_b_c t
p q w_w t
a b c d
p q _ r

최종 결과는 모든 행에 4개의 필드가 있다는 것입니다. awk, cut 또는 sed 등에서 이것이 가능합니까?

답변1

awk '{
  s = m = ""
  for (i = 3; i < NF; i++) {m = m s $i; s = "_"}
  if (m == "") m = "_"
  print $1, $2, m, $NF}'

답변2

흥미로운 대체 sed 버전:

sed -r 's/  */_/g; s/_/ /; s/_/ /  # convert all to _, unconvert 1st 2
        ts;:s; s/(.*)_/\1 / ;t     # if a trailing third exists unconvert it
        s/ / _ /2                  # else add one
'

관련 정보