csv 파일에 감소 필드 추가

csv 파일에 감소 필드 추가

다음과 유사한 콘텐츠가 포함된 CSV 파일이 있습니다.

10;12;33;44;55;66;77;88
1;2;3;4;5;6;7;8
110;112;133;144;155;616;771;818
...etc

각 줄에는 숫자로 구분된 8개의 숫자가 있습니다 ;.

1184에서 시작하여 아래로 내려가는 각 줄의 시작 부분에 새 필드를 추가해야 하므로 최종 파일은 다음과 같습니다.

1184;10;12;33;44;55;66;77;88
1183;1;2;3;4;5;6;7;8
1182;110;112;133;144;155;616;771;818
... etc

awkmacOS에서 무언가를 사용하여 이 작업을 어떻게 수행할 수 있나요 ?

답변1

awk 'BEGIN { n = 1184 } { printf("%d;%s\n", n--, $0) }' infile >outfile

n또는 명령줄에서 설정 하려면 다음 을 수행하세요.

awk -v n=1184 '{ printf("%d;%s\n", n--, $0) }' infile >outfile

또는 print대신 사용하십시오 printf.

awk -v n=1184 '{ print n-- ";" $0 }' infile >outfile

또는 awk새 필드와 행의 나머지 부분 사이에 필드 구분 기호를 삽입합니다.

awk -v n=1184 -v OFS=';' '{ print n--, $0 }' infile >outfile

또는 첫 번째 ;구분된 필드만 수정하고 레코드를 인쇄합니다.

awk -F ';' -v n=1184 -v OFS=';' '{ $1 = n-- OFS $1; print }' infile >outfile

이렇게 하면 각 기존 행 앞에 변수에 저장된 숫자가 붙고 n변수도 감소합니다. 해당 라인의 기존 데이터는 수정되지 않은 채 전달됩니다.

출력이 작성 outfile되고 질문의 샘플 데이터가 제공되면 다음과 같습니다.

1184;10;12;33;44;55;66;77;88
1183;1;2;3;4;5;6;7;8
1182;110;112;133;144;155;616;771;818

두 파일 이름은 달라야 infile합니다 outfile. 그렇지 않으면 입력 데이터 파일이 비워지고 손실됩니다.

관련 정보