여러 .csv 파일의 연속 숫자 열을 단일 .csv 파일로 병합

여러 .csv 파일의 연속 숫자 열을 단일 .csv 파일로 병합

저는 Linux/Centos7을 사용하고 있습니다. 병합할 csv 파일이 여러 개 있는데 이 명령을 사용하여 병합하고 있습니다.

cat *csv > all.csv

그러나 첫 번째 열에는 연속된 숫자가 포함되어 있으므로 병합하고 순차적으로 번호를 다시 매겨야 합니다.

==> 1.csv <==
1,bob,date,body
2,joe,date,body
3,ann,date,body

==> 2.csv <==
1,lisa,date,body
2,paul,date,body
3,mike,date,body

결과에서 첫 번째 열의 번호를 다시 매기길 원합니다.

==> output.csv <==
1,bob,date,body
2,joe,date,body
3,ann,date,body
4,lisa,date,body
5,paul,date,body
6,mike,date,body

정기적인 병합을 수행할 때 이것이 있고 이 병합된 파일의 번호를 다시 매길 수 있으면 작동합니다.

1,bob,date,body
2,joe,date,body
3,ann,date,body
1,lisa,date,body
2,paul,date,body
3,mike,date,body

답변1

이 명령은 당신이 원하는 것을 할 것입니다

cat *.csv | cut  --complement -d',' -f1 |sed -e 's/^/,/' |nl |sed -e "s/ //g"|sed -e "s/\\t//g" >all.csv

cut --complement -d',' -f1첫 번째 열을 잘라내면 얻을 수 있습니다.

bob,date,body
joe,date,body
ann,date,body
lisa,date,body
paul,date,body
mike,date,body

sed -e 's/^/,/'각 줄의 시작 부분에 , 를 추가합니다.

,bob,date,body
,joe,date,body

nl은 각 줄의 시작 부분에 숫자를 추가합니다.

 1  ,bob,date,body
 2  ,joe,date,body
 3  ,ann,date,body
 4  ,lisa,date,body

sed -e "s/ //g"|sed -e "s/\\t//g"숫자와 쉼표(,) 사이의 공백을 제거 합니다.

관련 정보