아래와 같이 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 '[^,]+,[^,]+,[^,]+,[^,]+$'
데이터 필드에 쉼표가 있나요? 그러면 혼란스러워집니다.