sed 解析数据:用空格分隔的字段(单词)

sda*_*aau 3 sed

sed在 Linux 上使用,试图匹配具有三个字段的数据行,制表符分隔(但分隔可以是任何空格),如下所示:

 12.3 0a 1b
 15.5 0v 1h
 17.7 5k 3c
Run Code Online (Sandbox Code Playgroud)

; 现在我正在使用这个:

sed -n 's/^\([^[:blank:]]*\)[[:blank:]]*\([^[:blank:]]*\)[[:blank:]]*\([^[:blank:]]*\)/\1\t\3\t\2/p' mydata.txt
Run Code Online (Sandbox Code Playgroud)

...所以我能够通过\1, \2,提取和操作(在示例中,只是位置反转)单个字段\3

有没有更好的方法来指定这一点?

干杯!

dmc*_*ten 5

awk 中的一个简单示例来建议可以做什么

awk '{print $2 $1 $3}` < input_file.txt
Run Code Online (Sandbox Code Playgroud)

简单地重新排列前两个字段,同时在所有行上打印所有三个字段。

要重新排列这些行恰好有三个字段,请保留以#(即类似 sh 语言的注释)开头的所有字段并删除所有其他字段

awk `/^#/{print $0;next} NF==3{print $2 $1 $3;next} {}' < input_file.txt
Run Code Online (Sandbox Code Playgroud)

大多数 unix 系统都有一个相当完整的 awk 手册页。

对于您的目的而言,重要的是这些字段可以使用$1, $2, ...访问,其中“字段”定义为由 FS(即字段分隔符)分隔的字符串,默认为(空格)。