다음과 같은 파일이 있습니다.
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]'
문자 경계에서 자동으로 분할하고 하나를 왼쪽으로 회전하여 인쇄합니다.