구분된 텍스트 파일의 열 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)}'