将最后六位数字移到数字的开头

2 awk text-processing

我正在使用 Twitter 将新闻拉入电子邮件,最后六个字段是日期和时间。我希望这些是前六个字段。awk 中将最后 n 个字段移动到行首的命令是什么?

我试过用谷歌搜索它,但给出的所有例子都假设每一行都有相同数量的字段

例子:

76356378090986
08976357627980089
089723571237809209
0897253712730912838798
908916523568909887
876756467890
09876535467890
765643324343
467890876543
234567890987654
123456789009876543
54323456789876
09876543345678
123456789009876
12345678998765
Run Code Online (Sandbox Code Playgroud)

结果:

09098676356378
98008908976357627
809209089723571237
8387980897253712730912
909887908916523568
467890876756
46789009876535
324343765643
876543467890
987654234567890
876543123456789009
78987654323456
34567809876543
009876123456789
99876512345678
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 7

sed

sed 's/\(.*\)\(.\{6\}\)/\2\1/'
Run Code Online (Sandbox Code Playgroud)


ImH*_*ere 5

使用 sed:

sed -E 's/(.*)(.{6})/\2\1/'
Run Code Online (Sandbox Code Playgroud)

或者:

sed 's/\(.*\)\(.\{6\}\)/\2\1/'
Run Code Online (Sandbox Code Playgroud)

使用 awk:

awk '{l=length-6;print(substr($0,l+1) substr($0,1,l))}'
Run Code Online (Sandbox Code Playgroud)

使用(GNU)awk:

awk '{print gensub(/(.*)(.{6})/,"\\2\\1",1)}'
Run Code Online (Sandbox Code Playgroud)