Csv
如何用序列號替換 CSV 中的第一個元素?
我有一個這樣的 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{}
但是如何按順序添加一個數字來替換日期?
awk解決方案:
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
- 與
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
和可以處理<(...)
重定向的 shell:paste -d\; <(jot $(wc -l <file.csv) 1004) <(cut -d\; -f2- file.csv)
- 使用 Vim:
:let cnt=1004 | g/^/ s/^[^;]\+/\=cnt/ | let cnt+=1
- 使用 Perl:
perl -F\; -lpe 'BEGIN{ $cnt=1004 } $F[0]=$cnt++; $_=join ";", @F' file.csv