![Gnu에서 각 행 복사본의 특정 값을 다르게 변경하면서 각 행을 복제합니다.](https://linux55.com/image/74097/Gnu%EC%97%90%EC%84%9C%20%EA%B0%81%20%ED%96%89%20%EB%B3%B5%EC%82%AC%EB%B3%B8%EC%9D%98%20%ED%8A%B9%EC%A0%95%20%EA%B0%92%EC%9D%84%20%EB%8B%A4%EB%A5%B4%EA%B2%8C%20%EB%B3%80%EA%B2%BD%ED%95%98%EB%A9%B4%EC%84%9C%20%EA%B0%81%20%ED%96%89%EC%9D%84%20%EB%B3%B5%EC%A0%9C%ED%95%A9%EB%8B%88%EB%8B%A4..png)
파일의 각 줄이 두 번 반복되기를 원하며, 줄의 첫 번째 복사본에서 값 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
.