csv 파일의 열을 다른 파일의 열로 바꾸기

csv 파일의 열을 다른 파일의 열로 바꾸기

다음과 같은 두 개의 샘플 파일이 있습니다.

$ cat file1
abc,sachin
cat,kumar 

$ cat file2
xyz
pressure

$ cat file3 
xyz,sachin
pressure, kumar 

file1첫 번째 열 을 file2.

나는 다음과 같이하려고합니다 :

$ awk 'FNR==NR{a[NR]=$3;next}{$2=a[FNR]}1' file1 file2

저는 Solaris 10을 사용하고 있는데 이 기능을 지원하지 않는 것 같습니다. 다른 제안이 있나요?

답변1

cut및 를 사용하는 것은 어떻습니까 paste? 쉘이 프로세스 대체를 지원하는 경우

$ paste -d, file2.txt <(cut -d, -f2 file1.txt)
xyz,sachin
pressure,kumar 

답변2

입력 필드 구분자를 지정해야 합니다. 또한, 당신이 어떤 분야를 선택하는지 모르겠습니다. awk에서는 필드가 1부터 시작합니다. 두 입력 파일 모두에서 3개의 필드가 누락되었습니다.

다음이 도움이 될 것입니다:

awk -F, 'FNR==NR{a[NR]=$1;next}{$1=a[FNR]}1' OFS=, file2.txt file1.txt

예제 입력의 경우 다음이 생성됩니다.

xyz,sachin
pressure,kumar

답변3

/usr/xpg4/bin/awk@devnull의 답변 또는 을 사용해보십시오 nawk.

/usr/bin아래와 /bin위의 프로그램 중 상당수는 호환 Solaris되지 POSIX않습니다.

perl또는 휴대용 으로 사용할 수 있습니다 .

$ perl -nle '                  
    unless (/,/) {                  
        push @a, $_;       
        next;
    }
    @l = split ",", $_;
    print "$a[$i++],$l[1]";
' file2.txt file1.txt
xyz,sachin
pressure,kumar

더 짧게:

$ perl -F',' -anle '
    if (@F == 1) {push @a,$_;next}    
    print "$a[$i++],$F[1]";
' file2.txt file1.txt

관련 정보