탭으로 구분된 .csv 파일이 있는데 머리글 행 정보를 처음에 있는 "새" 열로 이동한 다음 지정된 행 수만큼 아래로 이동해야 합니다. sed
또는 등 현재 사용하고 있는 표준 도구를 사용하고 싶지만 awk
다른 도구/접근 방식이 더 적합하다면 제안을 환영합니다. 각 파일의 제목이 변경되므로 적절한 행과 열에 "CAT" 문자열을 배치하는 대신 파일을 복사해야 합니다.
CAT
DOG DOG DOG DOG DOG DOG DOG
DOG DOG DOG DOG DOG DOG DOG
DOG DOG DOG DOG DOG DOG DOG
DOG DOG DOG DOG DOG DOG DOG
될 것입니다:
CAT
DOG DOG DOG DOG DOG DOG DOG
DOG DOG DOG DOG DOG DOG DOG
CAT DOG DOG DOG DOG DOG DOG DOG
DOG DOG DOG DOG DOG DOG DOG
답변1
paste
다음과 같이 할 수도 있습니다.
편집됨
그러면 첫 번째 줄이 다시 인쇄됩니다. 따옴표가 없다는 점을 이용하여 후행 공백이 표시되지 않습니다.
$ paste -d"\t" <(printf "\n\n\n%s" $(head -1 file)) file
CAT
DOG DOG DOG DOG DOG DOG DOG
DOG DOG DOG DOG DOG DOG DOG
CAT DOG DOG DOG DOG DOG DOG DOG
DOG DOG DOG DOG DOG DOG DOG
원래
$ -d"\t" <(printf "\n\n\nCAT") file
CAT
DOG DOG DOG DOG DOG DOG DOG
DOG DOG DOG DOG DOG DOG DOG
CAT DOG DOG DOG DOG DOG DOG DOG
DOG DOG DOG DOG DOG DOG DOG
답변2
다음 sed 명령이 저에게 효과적이었습니다.
sed '1!s/^/\t/;4s/^/CAT/'
설명하다:
1번 이외의 줄에서는 줄의 시작 부분을 탭 문자로 바꿉니다. 네 번째 줄에서 줄의 시작 부분을 CAT 문자열로 바꿉니다.
답변3
sed
다음과 같이 사용할 수 있다고 생각합니다 .
hold
첫 번째 줄을 공간에 저장- 라인 2에서 시작하는 추가 탭(열)을 추가합니다(이렇게 하면 헤더의 원래 열 정렬이 유지됩니다).
- 지정된 다음 줄(아래 예에서는 4번 줄을 사용했습니다)에서
hold
뒤에 오는 내용을 공백으로 바꾸고pattern
공백을 제거한 후 줄 앞에 추가합니다.
$ sed -e '1h' -e '2,$s/^/\t/' -e '4{x;s/[[:space:]]//g;G;s/\n//}' file
CAT
DOG DOG DOG DOG DOG DOG DOG
DOG DOG DOG DOG DOG DOG DOG
CAT DOG DOG DOG DOG DOG DOG DOG
DOG DOG DOG DOG DOG DOG DOG
답변4
사용 awk
:
awk -v line=4 -F '^\t*|\t+' '
NR==1 { OFS="\t"; ins=$2 }
NR!=line { print "","",$0 }
NR==line { print "",ins,$0 }' file
삽입할 텍스트로 헤더 행의 비어 있지 않은 첫 번째 필드를 사용하므로 탭이나 줄 바꿈을 제외한 모든 텍스트를 포함할 수 있습니다. 에서 항상 두 번째 필드로 읽혀지도록 필드 구분 기호를 설정합니다 awk
.