하나의 명령으로 2 개의 다른 컷 출력을 결합 하시겠습니까?


15

다음과 같은 파일이 있습니다.

1234
ABCD
EFGH

다음과 같이 변환하고 싶습니다.

2341
BCDA
FGHE

실제 파일에는 4,000 단어가 있으므로 효율적으로 수행하고 싶습니다. 나는 명령을 사용하려고 시도했지만 cut -c 2-4,1 file.txt입력과 동일한 정확한 출력을 생성합니다. 3 가지 명령을 사용할 수 있다고 생각했습니다.

cut -c 1 file.txt > temp1.txt
cut -c 2-4 file.txt > temp2.txt
// combine the two with paste or pr

...하지만 약간의 수정으로 여러 번 실행해야하므로 한 번의 명령을 실행하면 매번 3 개의 명령을 실행하는 것보다 오류가 덜 발생하기 때문에 단일 명령을 선호합니다.

2 개의 cut 문을 하나로 결합하는 방법이 있습니까? 다음과 같은 것 :

cut -c 1 file.txt | pr (cut -c 2-4 file.txt)

아니면 더 좋은 방법이 있습니까?

답변:


8

사용 sed:

sed 's:^\(.\)\(.*\):\2\1:' file.txt

2341
BCDA
FGHE

11

cutpaste당신은 또한 한 줄을 수행 할 수 있습니다 :

$ cat file
1234
ABCD
EFGH
$ paste --delimiter=''  <(cut file -c2-4) <(cut file -c1)
2341
BCDA
FGHE

붙여 넣기 바로 가기의 경우 +1 쉽게 이해할 수 있습니다. :)
Ankit

탭 대신 LIST의 문자를 재사용 하는 -d ''대신에 대신 사용할 수도 있습니다.--delimiters=''
rubo77


3
$ cat test
1234
ABCD
EFGH
$ awk -F "" '{print $2$3$4$1}' test
2341
BCDA
FGHE

데이터에 따라 "-F"를 통해 구분 기호를 변경하고 필드 순서를 임의로 정렬 할 수 있습니다.


1

한 가지 방법은 perl다음 과 같습니다.

perl -F'' -lane 'print @F[1..@F], $F[0]'

문자 경계에서 자동 분할하고 왼쪽으로 회전하여 인쇄합니다.


0

스크립트 방식으로 대안을 찾았습니다.

~$ cut -c2- file.txt>file2.txt
~$ cut -c1 file.txt>file3.txt
~$ paste -d "" file2.txt file3.txt>file4.txt
~$ rm file2.txt file3.txt

스크립트는 체인을 별도의 파일로 잘라냅니다. 그런 다음 새 파일 (file4.txt)에 참여하고 마지막으로 여분의 파일을 제거하십시오.

llua 솔루션은 내 취향에 더 깨끗합니다.


-1

rev를 사용해 보셨습니까?

~$ cat filename | rev


3
샘플 출력을 살펴보십시오. 그것은 순수한 반대가 아니라 좋은 생각입니다. 이 작업을 다시 수행하는 방법을 찾지 못하면 아마도 삭제되어 스레드를 혼란스럽게하지 않도록 삭제해야합니다.
slm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.