콘텐츠가 포함된 파일이 있습니다.
123 OneTwoThree
234 TwoThreeFour
345 ThreeFourFive
이 파일을 다음과 같은 것으로 변환하고 싶습니다.
OneTwoThree 123
TwoThreeFour 234
ThreeFourFive 345
여기서 첫 번째 열 항목은 위치 25에서 바뀌어야 합니다. 원본 파일의 두 번째 열이 25자를 초과하는 경우 나머지 문자는 건너뛰어야 합니다.이는 25일 이후의 모든 문자를 제거해야 함을 의미합니다.
예를 들어 위의 샘플 출력 파일에서 1
첫 번째 열은 위치 26에 있습니다.
awk, sed 또는 유사한 명령줄 도구를 사용하여 이 작업을 수행할 수 있습니까?
답변1
무엇에 대해:
awk '{printf "%-25s %s\n",$2,$1}' file
바라보다:
cat file
123 OneTwoThree
234 TwoThreeFour
345 ThreeFourFive
789 abcdefghijklmnopqrstuvwxyz
999 abcdefghijklmnopqrstuvwxyzABC
산출:
awk '{printf "%-25s %s\n",$2,$1}' file
OneTwoThree 123
TwoThreeFour 234
ThreeFourFive 345
abcdefghijklmnopqrstuvwxyz 789
abcdefghijklmnopqrstuvwxyzABC 999
답변2
두 번째 필드의 25번째 문자 이후를 자르려면 awk에서 substr 함수를 사용할 수 있습니다.
문서
cat file
123 OneTwoThree
234 TwoThreeFour
345 ThreeFourFive
456 abcdefghijklmnopqrstuvwxyz
산출
awk '{printf("%-26s %s\n", substr($2,0,25),$1)}' file
OneTwoThree 123
TwoThreeFour 234
ThreeFourFive 345
abcdefghijklmnopqrstuvwxy 456