我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
。
有没有更好的方法来指定这一点?
干杯!
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(即字段分隔符)分隔的字符串,默认为(空格)。
归档时间: |
|
查看次数: |
7854 次 |
最近记录: |