Gnu에서 각 행 복사본의 특정 값을 다르게 변경하면서 각 행을 복제합니다.

Gnu에서 각 행 복사본의 특정 값을 다르게 변경하면서 각 행을 복제합니다.

파일의 각 줄이 두 번 반복되기를 원하며, 줄의 첫 번째 복사본에서 값 3은 2로 변경되고 값 4는 1로 변경됩니다. 각 행의 두 번째 복사본에서는 값 3이 1로 변경되고 값 4가 2로 변경됩니다. 복제를 위해 awk 명령을 사용할 수 있다는 것을 알고 있습니다.

awk '{for(i=0;i<1;i++)print}' input > output

그런데 제가 설명한 방식대로 값을 어떻게 바꾸는지 모르겠어요

예를 들어, 각 줄을 2번 반복합니다.

1 000003444
2 334566875
3 000233300
4 222111000

이 되다:

1 000002111
1 000001222
2 221566875
2 112566875
3 000222200
3 000211100
4 222111000
4 222111000

답변1

그리고 awk:

$ awk '
  { tmp = $2; gsub("3", "2", $2); gsub("4", "1", $2); print}
  { $2 = tmp; gsub("3", "1", $2); gsub("4", "2", $2); print}
' <file

답변2

펄 방식:

$ perl -lane '$i=$F[1]; $F[1]=~s/3/2/g; $F[1]=~s/4/1/g; 
              $i=~s/3/1/g; $i=~s/4/2/g; print "$F[0] $F[1]\n$F[0] $i"' file 
1 000002111
1 000001222
2 221566875
2 112566875
3 000222200
3 000211100
4 222111000
4 222111000

먼저 현재 줄을 로 저장한 $i다음 현재 줄에서 필요한 대체 작업을 수행하고 마지막 $i으로 현재 줄( $_) 및 을 인쇄합니다 $i.

관련 정보