구분된 텍스트 파일에서 특정 열의 길이 줄이기

구분된 텍스트 파일에서 특정 열의 길이 줄이기

구분된 텍스트 파일의 열 5를 처음 5자로 줄여야 합니다. 다른 모든 열은 편집되지 않은 상태로 유지되어야 합니다.

입력하다:

file1.txt    column1      column2      column3     column4      column5
123456789    123456789    123456789   123456789    123456789

출력이 다음과 같기를 원합니다.

output.txt    column1      column2      column3     column4      column5
123456789    123456789    123456789   123456789    12345

참고: 저는 쉼표를 구분 기호로 사용합니다.

답변1

file.csv다음과 같은 경우 :

123456789,123456789,123456789,123456789,123456789
123456789,123456789,123456789,123456789,223456789
123456789,123456789,123456789,123456789,323456789
123456789,123456789,123456789,123456789,423456789

그런 다음 다음을 수행할 수 있습니다.

$ awk -F, '{print $1","$2","$3","$4","substr($5,1,5) }' file.csv
123456789,123456789,123456789,123456789,12345
123456789,123456789,123456789,123456789,22345
123456789,123456789,123456789,123456789,32345
123456789,123456789,123456789,123456789,42345

답변2

모든 값이 단순하고(값에 따옴표나 줄 바꿈 없음) 쉼표로 구분된 경우 예를 들면 다음과 같습니다.

123456789,123456789,123456789,123456789,123456789

항상 5개의 값이 연속적으로 있는 경우 다음을 사용할 수 있습니다 sed.

sed '2,$s/\(.*\),\(.*\),\(.*\),\(.*\),\(.....\)\(.*\)/\1,\2,\3,\4,\5/' input

2,$쉼표로 구분된 헤더가 있고 다섯 번째 열이 잘리지 않아야 한다고 가정하고 , 그렇지 않은 경우 무시하세요.

답변3

또는 awk:

공간 분리의 경우:

awk 'NR==1 { print; next} {print $1, $2, $3, $4, substr($5,1,5)}'

쉼표로 구분된 경우:

awk 'BEGIN {FS=","} NR==1 { print; next} {print $1, $2, $3, $4, substr($5,1,5)}'

약간 더 나은 CSV 분할 및 GNU awk 가정을 위해:

awk -vFPAT='[^,]*|"[^"]*"'  'NR==1 { print; next} {print $1, $2, $3, $4, substr($5,1,5)}'

관련 정보