마지막 6자리를 숫자의 시작 부분으로 이동

마지막 6자리를 숫자의 시작 부분으로 이동

저는 Twitter를 사용하여 뉴스를 이메일로 추출하고 있으며 마지막 6개 필드는 날짜와 시간입니다. 나는 이것이 처음 6개의 필드가 되기를 원합니다. 마지막 n 필드를 줄의 시작 부분으로 이동하는 awk의 명령은 무엇입니까?

인터넷 검색을 시도했지만 주어진 모든 예에서는 각 행에 동일한 수의 필드가 있다고 가정합니다.

예:

76356378090986
08976357627980089
089723571237809209
0897253712730912838798
908916523568909887
876756467890
09876535467890
765643324343
467890876543
234567890987654
123456789009876543
54323456789876
09876543345678
123456789009876
12345678998765

결과:

09098676356378
98008908976357627
809209089723571237
8387980897253712730912
909887908916523568
467890876756
46789009876535
324343765643
876543467890
987654234567890
876543123456789009
78987654323456
34567809876543
009876123456789
99876512345678

답변1

그리고 sed:

sed 's/\(.*\)\(.\{6\}\)/\2\1/'

답변2

sed를 사용하세요:

sed -E 's/(.*)(.{6})/\2\1/'

또는:

sed 's/\(.*\)\(.\{6\}\)/\2\1/'

awk를 사용하세요:

awk '{l=length-6;print(substr($0,l+1) substr($0,1,l))}'

(GNU) awk 사용:

awk '{print gensub(/(.*)(.{6})/,"\\2\\1",1)}'

답변3

cat file | sed -e 's/\(.\)/\1 /g' | awk '{ for (i = 1; i <= NF; i++) printf "%s" FS, $((NF-7+i) % NF+1); print ""}' | sed 's/ //g'
09098676356378
98008908976357627
809209089723571237
8387980897253712730912
909887908916523568
467890876756
46789009876535
324343765643
876543467890
987654234567890
876543123456789009
78987654323456
34567809876543
009876123456789
99876512345678

답변4

일부 Perl 용어:

  1. 각 줄을 문자로 나눕니다.

    perl -F'' -lane 'print join "", splice(@F, -6), @F' file
    
  2. 하위 문자열 사용

    perl -lpe '$_ = substr($_, -6) . substr($_, 0, $#_ - 6)' file
    

관련 정보