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

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

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

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)

아니면 더 좋은 방법이 있나요?

답변1

다음을 사용하여 cut다음 paste줄을 수행할 수도 있습니다.

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

답변2

사용 sed:

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

2341
BCDA
FGHE

답변3

Bash를 사용하는 경우 문자열 인덱싱을 사용하세요.매개변수 확장:

while IFS= read -r word; do
  echo "${word:1:3}${word:0:1}"
done < file.txt

답변4

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

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

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

관련 정보