길이가 4보다 작으면 Linux의 파일 줄 시작 부분에 열을 추가합니다.

길이가 4보다 작으면 Linux의 파일 줄 시작 부분에 열을 추가합니다.

아래와 같이 linux 폴더에 파일이 있습니다. 파일에는 값이 쉼표로 구분된 4개의 열이 있어야 합니다. 그러나 일부 행에는 3개의 열만 있습니다. 열이 3개 있는 경우 행 시작 부분에 공백을 추가하고 싶습니다.

입력하다:

col1,col2,col3,col4
a1,a2,a3,a4
b1,b2,b3,b4
c2,c3,c4
d1,d2,d3,d4

산출:

col1,col2,col3,col4
a1,a2,a3,a4
b1,b2,b3,b4
,c2,c3,c4
d1,d2,d3,d4

미리 감사드립니다

답변1

awk ex를 사용할 수 있습니다.

awk -F, 'NF==3 {$0=","$0} 1' file

적합한 최신 버전의 GNU awk가 있는 경우 다음을 사용하여 파일에 해당 버전을 적용할 수 있습니다.

gawk -i inplace -F, 'NF==3 {$0=","$0} 1' file

그렇지 않으면 와 같은 다른 도구를 사용하는 것이 sed더 쉬울 수도 있습니다 perl.

perl -i -F, -pe '$_ = "," . $_ if $#F == 2' file

아마도

sed -i'.bak' -e 's/,/,/3;t' -e 's/^/,/' file

(세 번째 쉼표를 바꾸십시오. 실패할 경우 줄 시작 부분의 쉼표를 바꾸십시오).

답변2

나는 sed해결책을 제안합니다:

sed 's/^\([^,]*,[^,]*,[^,]*\)$/,\1/' file

산출

col1,col2,col3,col4
a1,a2,a3,a4
b1,b2,b3,b4
,c2,c3,c4
d1,d2,d3,d4

답변3

이것이 작동하는지 확실하지 않으며 아직 테스트할 기계가 없습니다.

하지만 언제든지 쉼표를 추가한 다음 grep을 사용하여 마지막 4개 요소를 찾을 수 있습니다.

sed -e 's#^#,#' | grep -o -E '[^,]+,[^,]+,[^,]+,[^,]+$'

데이터 필드에 쉼표가 있나요? 그러면 혼란스러워집니다.

관련 정보