CSV 레코드를 순차적으로 변경

CSV 레코드를 순차적으로 변경

파일의 텍스트를 순차적으로 바꾸고 싶습니다.

파일 내용은 다음과 같습니다.

1,01-JUN-2016,ABC
2,01-JUN-2016,ABC
3,01-JUN-2016,ABC
4,01-JUN-2016,ABC
5,01-JUN-2016,ABC
6,02-JUN-2016,ABC
7,02-JUN-2016,ABC
8,02-JUN-2016,ABC
9,02-JUN-2016,ABC
10,02-JUN-2016,ABC
11,02-JUN-2016,ABC
12,02-JUN-2016,ABC
13,02-JUN-2016,ABC
14,02-JUN-2016,ABC

다음과 같이 수정하고 싶습니다.

1,01-JUN-2016,ABC1
2,01-JUN-2016,ABC2
3,01-JUN-2016,ABC3
4,01-JUN-2016,ABC4
5,01-JUN-2016,ABC5
6,02-JUN-2016,ABC6
7,02-JUN-2016,ABC7
8,02-JUN-2016,ABC1
9,02-JUN-2016,ABC2
10,02-JUN-2016,ABC3
11,02-JUN-2016,ABC4
12,02-JUN-2016,ABC5
13,02-JUN-2016,ABC6
14,02-JUN-2016,ABC7

답변1

awk를 사용하세요

awk '$0=$0 (NR-1)%7+1' file

또는

awk '{print (NR-1)%7+1}' file

기본적으로 1을 빼는 것은 숫자 0부터 시작됩니다.
Modulo 7은 일곱 번째 줄마다 반복됩니다.
게다가 7 mod 7은 0이기 때문에 우리가 시작하고 싶은 것이 아니기 때문에 1부터 시작하고 싶기 때문에 +1합니다.

답변2

$ awk -F, 'FNR < 8 { print $0$1 }; FNR > 7 {print $0($1-7)}' arvind.txt 
1,01-JUN-2016,ABC1
2,01-JUN-2016,ABC2
3,01-JUN-2016,ABC3
4,01-JUN-2016,ABC4
5,01-JUN-2016,ABC5
6,02-JUN-2016,ABC6
7,02-JUN-2016,ABC7
8,02-JUN-2016,ABC1
9,02-JUN-2016,ABC2
10,02-JUN-2016,ABC3
11,02-JUN-2016,ABC4
12,02-JUN-2016,ABC5
13,02-JUN-2016,ABC6
14,02-JUN-2016,ABC7

줄 번호가 8보다 작은 경우 전체 줄을 인쇄한 다음 첫 번째 필드를 인쇄합니다. 줄 번호가 7보다 큰 경우 전체 줄을 인쇄한 다음 첫 번째 필드에서 7을 뺀 값을 인쇄합니다.

참고로 은 현재 입력 파일에서 지금까지 본 FNR입력 레코드 수 입니다. 내장 변수입니다. 그것은 가지고있다awkFNRawk아무것도 없다(우연을 넘어) 입력 파일의 첫 번째 필드 값과 관련이 있습니다.

그런데 여러 입력 파일을 사용하여 이 명령을 실행하고 각 파일의 개별 줄 수가 아닌 모든 입력 파일의 누적 줄 수를 원하는 경우 NR대신 를 사용하세요 FNR.

답변3

이 시도:

awk -F, '$1 <=7 { print $0$1 }; $1 > 7 {print $0($1-7)}' filename

관련 정보