cat, sed, awk 또는 cut을 사용하여 csv 파일의 특정 위치에 열을 추가하는 방법은 무엇입니까?

cat, sed, awk 또는 cut을 사용하여 csv 파일의 특정 위치에 열을 추가하는 방법은 무엇입니까?

다음 내용이 포함된 csv 파일이 있습니다.

col1, col2, col5
1,    1,    1
2,    2,    2
3,    3,    3
4,    4,    4

헤더가 포함되어 있지만 null 값이 포함된 파일의 세 번째 위치에 열을 추가해야 합니다.

col1, col2, col3, col4
1,    1,        ,   1
2,    2,        ,   2
3,    3,        ,   3
4,    4,        ,   4

cat, sed, awk 또는 cut과 같은 Linux 명령 중 하나를 사용하여 이를 수행할 수 있는 방법이 있습니까?

나는 cut을 사용하면 열별로 파일을 수정할 수 있다는 것을 알고 있습니다 cut -d , -f1,2,3 file1 > file2. 하지만 사용자 정의 열을 추가하는 옵션은 없는 것 같습니다.

어떤 도움이라도 대단히 감사하겠습니다.

답변1

sed결과를 얻기 위한 명령은 다음과 같습니다 .

sed '1s/\(.*,\)\([^,]*\)$/\1col3,\2/;
     2,$s/\(.*,\)\([^,]*\)$/\1,\2/' file.csv

,이것은 행의 마지막 것을 찾아 다음으로 바꿉니다.

  • col3,첫 번째 줄에
  • ,다른 모든 라인에서는

이 명령은 원하는 출력을 에 인쇄합니다 stdout. 파일을 그 자리에서 편집하려면 -i위 명령으로 전환하세요.

답변2

$ awk 'BEGIN { FS=","; OFS=",\t" };
       FNR == 1 { print $1,$2,"col3","col4" };
       FNR  > 1 { print $1,$2,"\t",$3 }' file.csv 
col1,    col2,  col3,   col4
1,      1,      ,       1
2,      2,      ,       2
3,      3,      ,       3
4,      4,      ,       4

관련 정보