다음과 같은 CSV 파일이 있습니다.
5/05/2017;03;07;30;35;43;01;03
9/05/2017;08;12;16;22;26;06;07
12/05/2017;02;20;28;29;44;03;09
16/05/2017;08;11;15;20;30;03;08
19/05/2017;09;11;12;19;30;04;09
23/05/2017;08;15;25;27;42;01;04
26/05/2017;05;07;26;36;39;02;10
...
즉, 날짜 다음에 일련의 숫자가 옵니다 ;
.
첫 번째 위치에서 날짜를 제거하고 1004부터 순차적으로 시작해야 합니다. 다음과 같습니다.
1004;03;07;30;35;43;01;03
1005;08;12;16;22;26;06;07
1006;02;20;28;29;44;03;09
1007;08;11;15;20;30;03;08
1008;09;11;12;19;30;04;09
1009;08;15;25;27;42;01;04
1010;05;07;26;36;39;02;10
...
다음을 사용하여 날짜를 제거할 수 있습니다.
cut -f 2-8 -d';' 2.txt | xargs -I{}
하지만 날짜를 대체하기 위해 숫자를 추가하는 방법은 무엇입니까?
답변1
앗해결책:
awk -F';' 'BEGIN{ i=1004 }{ $1=i++ }1' OFS=';' file
-F';'
- 입력 필드 구분 기호i=1004
- 시작증가
산출:
1004;03;07;30;35;43;01;03
1005;08;12;16;22;26;06;07
1006;02;20;28;29;44;03;09
1007;08;11;15;20;30;03;08
1008;09;11;12;19;30;04;09
1009;08;15;25;27;42;01;04
1010;05;07;26;36;39;02;10
i
또는 "외부적으로" 변수를 전달할 수도 있습니다.
awk -F';' '{ $1=i++ }1' i=1004 OFS=';' file
답변2
그리고
awk
:awk -v cnt=1004 '{ sub("^[^;]+", cnt++) } 1' file.csv
쉘 포함:
cnt=1004 while read -r line; do printf '%d;%s\n' $cnt "${line#*;}" let cnt++ done <file.csv
jot
,paste
및 리디렉션을 처리할 수 있는 셸을 사용하세요<(...)
.paste -d\; <(jot $(wc -l <file.csv) 1004) <(cut -d\; -f2- file.csv)
빔 사용:
:let cnt=1004 | g/^/ s/^[^;]\+/\=cnt/ | let cnt+=1
펄 사용:
perl -F\; -lpe 'BEGIN{ $cnt=1004 } $F[0]=$cnt++; $_=join ";", @F' file.csv
답변3
읽고, 이해하고, 유지 관리하기 쉽고 대부분의 Unix 설치에서 작동하는 Python을 사용하세요.
python - << "EOF" > outfilename
for index, line in enumerate(open("filename"), start=1004):
linedata = line.strip().split(';')
linedata[0] = str(index)
print(';'.join(linedata))
EOF