조건에 따라 중복 레코드를 생성한 다음 생성될 새 행의 열에 있는 값을 변경해야 하는 쉘 스크립트를 작성해야 합니다.
조건에 따라 중복 레코드를 생성한 다음 중복 행의 열을 바꾸려고 합니다.
예:
입력은 다음과 같습니다.
열 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은 확인하려는 숫자(예:$3
5번째 필드)입니다.진주
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