![열의 일부를 선택하고 새 열로 붙여넣기](https://linux55.com/image/148272/%EC%97%B4%EC%9D%98%20%EC%9D%BC%EB%B6%80%EB%A5%BC%20%EC%84%A0%ED%83%9D%ED%95%98%EA%B3%A0%20%EC%83%88%20%EC%97%B4%EB%A1%9C%20%EB%B6%99%EC%97%AC%EB%84%A3%EA%B8%B0.png)
다음 형식의 파일이 있습니다.
# Comment
# Comment
# Comment
@ Title
@ Label
@ Label
1 2
2 5
3 7
&
1 7
2 4
3 9
&
따라서 첫 번째 열은 반복되고 두 번째 열은 변경됩니다. 첫 번째 열에서는 "&"로 구분되고 두 번째 열에서는 공백으로 구분됩니다. 그러한 섹션이 수천 개 있을 수 있습니다. 두 번째 열의 일부를 잘라서 새 열로 붙여넣고 싶습니다. 따라서 이 경우에는 다음과 같습니다.
# Comment
# Comment
# Comment
@ Title
@ Label
@ Label
1 2 7
2 5 4
3 7 9
그러면 모든 열을 더 쉽게 차트로 작성할 수 있습니다. 첫 번째 행도 신경 쓰지 않습니다. 삭제하거나 그대로 두는 것이 더 쉬울 경우에는 중요하지 않습니다.
답변1
달리다:
cat << EOF | awk '
$1 == "#" || $1 == "@" { print; next }
$1 != "&" { result[$1] = (result[$1] ? result[$1] : $1) "\t" $2 }
END { for (i in result) print result[i] }
'
# Comment
# Comment
# Comment
@ Title
@ Label
@ Label
1 2
2 5
3 7
&
1 7
2 4
3 9
&
EOF
아니면 이 파일을 사용해도 됩니다파일 이름입력 데이터로. 이 경우 다음을 실행합니다.
awk '
$1 == "#" || $1 == "@" { print; next }
$1 != "&" { result[$1] = (result[$1] ? result[$1] : $1) "\t" $2 }
END { for (i in result) print result[i] }
' filename
두 경우 모두 다음과 같은 결과를 얻게 됩니다.
# Comment
# Comment
# Comment
@ Title
@ Label
@ Label
1 2 7
2 5 4
3 7 9
여러 열에 대해 작동합니다.