저는 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 용어:
각 줄을 문자로 나눕니다.
perl -F'' -lane 'print join "", splice(@F, -6), @F' file
하위 문자열 사용
perl -lpe '$_ = substr($_, -6) . substr($_, 0, $#_ - 6)' file