我目前有一个文本文件,其行格式包含以下数据:
TIME (HR) 0 6 12 18 24 36 48 60 72 84 96 108 120
我想将此行“翻转”成一列,以便显示:
TIME (HR)
0
6
12
18
24
etc...
有没有办法用sed / awk做到这一点?
答案 0 :(得分:4)
grep可以做到:
grep -Po '.*\)|\d+' file
这条线也有效:
grep -Po '.*?(?= \d)|\d+' file
试验:
kent$ cat f
TIME (HR) 0 6 12 18 24 36 48 60 72 84 96 108 120
kent$ grep -Po '.*\)|\d+' f
TIME (HR)
0
6
12
18
24
36
48
60
72
84
96
108
120
答案 1 :(得分:3)
通过awk,
awk '{print $1,$2;for(i=3;i<=NF;i++) print $i}' file
通过perl,
perl -pe 's/(^\S+\s+\S+)(*SKIP)(*F)| /\n/g' file
答案 2 :(得分:3)
另一个人:
perl -pe 's/\s+(?=\d+)/\n/g'
测试:
$ echo 'TIME (HR) 0 6 12 18 24 36 48 60 72 84 96 108 120' | perl -pe 's/ (?=\d+)/\n/g'
TIME (HR)
0
6
12
18
24
36
48
60
72
84
96
108
120
另一个伟大的解决方案(来自@AvinashRaj的评论)
perl -pe 's/\s+(?!\()/\n/g'
perl -pe 's/ (?=\b)/\n/g'
答案 3 :(得分:3)
$ awk -v RS=' ' '{ORS=(NR<2?" ":"\n")}1' file
TIME (HR)
0
6
12
18
24
答案 4 :(得分:0)
sed 's/ \([0-9]\)/\
\1/g' YourFile
posix版本(所以--posix
用于GNU sed)
通过返回更改任何空格后跟数字。由于sed正则表达式中没有反向引用,因此数字会保留在内存中并进行回退