![3개의 중복된 줄 중 2개를 반대로 바꿉니다.](https://linux55.com/image/123767/3%EA%B0%9C%EC%9D%98%20%EC%A4%91%EB%B3%B5%EB%90%9C%20%EC%A4%84%20%EC%A4%91%202%EA%B0%9C%EB%A5%BC%20%EB%B0%98%EB%8C%80%EB%A1%9C%20%EB%B0%94%EA%BF%89%EB%8B%88%EB%8B%A4..png)
이런 txt 파일이 있어요
AAAAAAAAAA
BBBBBBBBBB
CCCCCCCC
DDDDDDDDDDD
EEEEEEEEEEE
FFFFFFFFFFF
GGGGGGGGGGG
HHHHHHHHHHH
IIIIIIIIIII
각 그룹에는 3개의 줄이 있으며 사이에 줄바꿈이 있습니다.
파일이 다음과 같이 보이도록 각 그룹의 처음 두 줄을 뒤집고 싶습니다.
BBBBBBBBBB
AAAAAAAAAA
CCCCCCCC
EEEEEEEEEEE
DDDDDDDDDDD
FFFFFFFFFFF
HHHHHHHHHHH
GGGGGGGGGGG
IIIIIIIIIII
터미널에서 이 작업을 어떻게 수행합니까?
편집: 텍스트 파일의 예를 다음에 업로드했습니다.여기답변을 테스트해야 하는 경우.
답변1
$ cat -n ip.txt
1 AAAAAAAAAA
2 BBBBBBBBBB
3 CCCCCCCC
4
5 DDDDDDDDDDD
6 EEEEEEEEEEE
7 FFFFFFFFFFF
8
9 GGGGGGGGGGG
10 HHHHHHHHHHH
11 IIIIIIIIIII
고정된 형식이므로 그에 맞게 모듈로 연산자를 사용하십시오.
$ awk 'NR%4==1{s=$0; next} 1; NR%4==2{print s}' ip.txt
BBBBBBBBBB
AAAAAAAAAA
CCCCCCCC
EEEEEEEEEEE
DDDDDDDDDDD
FFFFFFFFFFF
HHHHHHHHHHH
GGGGGGGGGGG
IIIIIIIIIII
흥미로운 perl
정규식 버전
perl -00 -pe 's/(\N+\n)(\N+\n)/$2$1/' ip.txt
-00
awk와 유사한 단락 모드-v RS=
- 그런 다음 처음 두 줄을 바꾸십시오.
- 또한 사용 가능
(\N+\n)((?1))
- 복잡한 정규식을 반복해야 하는 경우 유용합니다.
- 또한 사용 가능
답변2
단방향 - GNU awk 사용:
gawk 'BEGIN{RS=""; OFS=FS="\n"} {tmp = $2; $2 = $1; $1 = tmp; ORS=RT} 1' file
BBBBBBBBBB
AAAAAAAAAA
CCCCCCCC
EEEEEEEEEEE
DDDDDDDDDDD
FFFFFFFFFFF
HHHHHHHHHHH
GGGGGGGGGGG
IIIIIIIIIII
답변3
sed -n 'h; n; G; N; p; n; p' input.txt
설명하다
sed
대기 공간과 패턴 공간이라는 두 가지 작업 공간이 있습니다 . 그들은 두 개의 변수와 같습니다 - var_1
및 var_2
. 각 입력 라인은 패턴 공간으로 들어가지만 이를 복사(예약된 공간의 모든 항목 대체)하거나 예약된 공간에 추가할 수 있습니다. 그러므로:
h
- 패턴 공간을 예약된 공간으로 복사합니다. 이제 패턴 공간과 홀드 공간은 모두AAAAA
.n
- 다음 입력 라인을 패턴 공간으로 가져옵니다. 따라서 패턴 공간은 이제BBBBB
.G
- 개행 문자와 keepspace( )의 내용을AAAAA
패턴 공간에 추가하여 패턴 공간이 현재 가 되도록 합니다BBBBB\nAAAAA
.N
- 패턴 공간에 개행 문자와 입력의 다음 줄을 추가합니다. -BBBBB\nAAAAA\nCCCCC
p
- 패턴 공간을 인쇄합니다.n
- 패턴 공간에 대한 다음 입력 줄을 가져오고(존재하는 경우), 그렇지 않으면 종료합니다(파일 끝에 도달한 경우).p
- 패턴 공간을 다시 인쇄합니다.
산출
BBBBBBBBBB
AAAAAAAAAA
CCCCCCCC
EEEEEEEEEEE
DDDDDDDDDDD
FFFFFFFFFFF
HHHHHHHHHHH
GGGGGGGGGGG
IIIIIIIIIII