조건에 따라 중복 레코드 생성

조건에 따라 중복 레코드 생성

조건에 따라 중복 레코드를 생성한 다음 생성될 새 행의 열에 있는 값을 변경해야 하는 쉘 스크립트를 작성해야 합니다.

조건에 따라 중복 레코드를 생성한 다음 중복 행의 열을 바꾸려고 합니다.

예:

입력은 다음과 같습니다.

열 1, 열 2, 열 3, 열 4, 열 5

1234,abcd,abcd,wxyz,USD
2345,abcd,abcd,wxyz,USD
3456,abcd,abcd,wxyz,EUR

마지막 열, 즉 col5가 euro인 경우 열 값 변경에 따라 행을 하나 더 생성해야 합니다.

출력은

열 1, 열 2, 열 3, 열 4, 열 5

1234,abcd,abcd,wxyz,USD
2345,abcd,abcd,wxyz,USD
3456,abcd,abcd,wxyz,EUR
3456,abcd,abcd,wxyz,AUD

답변1

이를 수행하는 방법에는 여러 가지가 있습니다.

  • awk -F, '{print; if($NF=="EUR"){$NF="AUD"; OFS=",";print}}' file
    

    즉, $NR다른 필드를 확인하려면 마지막 필드( )를 확인하고 $NR로 변경합니다 $N. 여기서 N은 확인하려는 숫자(예: $35번째 필드)입니다.

  • 진주

    perl -pe '$_.= "$1AUD\n" if /(.*)EUR$/' file 
    

    이것은 Perl 속기를 많이 사용하며 설명하기가 약간 어렵습니다. 다음과 같이 동일한 내용을 작성할 수 있습니다.

    perl -e 'while(<>){if(/(.*)EUR$/){print "$_","$1AUD\n"} else {print "$_"}}' 
    

입력 파일의 각 줄에 대해

답변2

사용 sed:

 sed -e 's|^\(.*\),EUR$|\1,EUR\r\1,AUD|'

답변3

펄의 대안

perl -ne 'print;print if s/EUR\Z/AUD/' your_file

파일을 제자리에서 수정하려면 스위치를 추가하면 됩니다 -i.

perl -ni -e 'print;print if s/EUR\Z/AUD/' your_file

관련 정보