CSV 파일 작업

CSV 파일 작업

두 개의 csv 파일이 있는데 A와 B라고 가정하겠습니다. 실수로 일이 섞였다는 것을 깨달았습니다. 이제 이 실수를 취소하기 위해 파일 A의 세 번째 열의 데이터를 파일 B와 파일 B의 네 번째 열에 쓰는 쉘 스크립트를 작성하고 싶습니다. 네 번째 열의 데이터는 다음과 같습니다. 파일 B에 기록되고 파일 A의 세 번째 열에 있는 데이터가 기록됩니다. 특정 열에서 데이터를 가져오는 데 "cut" 명령을 사용할 수 있다는 것은 알고 있지만 csv 파일의 특정 열 뒤에 구분 기호의 발생 횟수를 한 줄에 쓰려면 어떤 명령을 사용해야 하는지 모르겠습니다. 숫자.

그런 스크립트를 작성하는 방법은 무엇입니까?

답변1

주어진

A.csv:
1,2,V,4

B.csv:
X,Y,Z,3

그 다음에

paste -d, <(cut -d, -f1,2 A.csv) <(cut -d, -f4 B.csv) <(cut -d, -f4 A.csv)
1,2,3,4

답변2

awk당신의 친구입니다

fileA"say" fileA.bakfileB"say" 복사 fileB.bak:

#first changing fileB
awk -v FS="," 'NR==FNR{fileA[i++]=$3;next}{$4=fileA[j++];print}' fileA.bak fileB.bak > fileB 
#fileB should be Okay now.
#now changing fileA
awk -v FS="," 'NR==FNR{fileB[i++]=$4;next}{$3=fileA[j++];print}' fileB.bak fileA.bak > fileA
#fileA should be Okay now.
#verify that you have the desired contents in both fileA & fileB
#Now delete the backup files
rm fileA.bak fileB.bak

노트
1. 두 개의 스크립트를 결합하는 것이 가능 awk하지만 더 명확하고 읽기 쉽게 만들기 위해 스크립트를 분리하는 이유는 무엇입니까?
2. 이 솔루션은 질문에 동일한 수의 레코드가 있고 질문에서 이를 알고 있다고 fileA가정 합니다.fileB

관련 정보