需要将下面的awk命令转换为sed

时间:2013-05-11 22:16:43

标签: linux unix sed awk

我需要将下面的awk命令转换为sed,
awk -F ',' '$2 ~ /^ *[0-9]*(\.[0-9]+)?" *$/{sub(/"/, "", $2); print $2}'

以下是我的输入文件:

sample.txt的:

3",3"
6-position,6-position
7' 4" to 10' 3-1/2",7' 4" to 10' 3-1/2"
4.8",4.8"
Adjustable from 99" to 111" - max 148,Adjustable from 99" to 111" - max 148

我需要输出如下,

output.txt的:

3",3
6-position,
7' 4" to 10' 3-1/2",
4.8",4.8
Adjustable from 99" to 111" - max 148,
所以基本上我需要打印“符号的数值”,其他非数字文本需要用空行替换,awk命令的问题是2,3和5行被删除。

3 个答案:

答案 0 :(得分:1)

正如我评论的那样,awk one-liner对你的输入文件没有意义。但是你可以尝试这个sed行:

sed -r '/^[0-9.]+"$/{s/"$//;n;};s/.*//' file

这适用于您的输入文件。

kent$  cat file
3"
6-position
7' 4" to 10' 3-1/2"
4.8"
Adjustable from 99" to 111" - max 148    
kent$  sed -r '/^[0-9.]+"$/{s/"$//;n;};s/.*//' file
3


4.8
(here, the last line is empty too.)

修改

删除-r选项,并调整sed以使用新的输入/输出:

sed  's/^\([^,]*,\)\([0-9.]*\)".*$/\1\2/;t;s/^\([^,]*,\).*/\1/' file

此行适用于您的新输入示例:

kent$  cat file
3",3"
6-position,6-position
7' 4" to 10' 3-1/2",7' 4" to 10' 3-1/2"
4.8",4.8"
Adjustable from 99" to 111" - max 148,Adjustable from 99" to 111" - max 148

kent$  sed  's/^\([^,]*,\)\([0-9.]*\)".*$/\1\2/;t;s/^\([^,]*,\).*/\1/' file
3",3
6-position,
7' 4" to 10' 3-1/2",
4.8",4.8
Adjustable from 99" to 111" - max 148,

答案 1 :(得分:0)

这对我有用:

sed -e 's/^\([0-9]\+\(\.[0-9]\+\)*\)"$/\1/g' \
-e '/^\([0-9]\+\(\.[0-9]\+\)*\)$/! s/^.*$//g' sample.txt

答案 2 :(得分:0)

您可以同时使用awk和sed执行此操作。 由于我手机上没有Linux(shell),我会尝试使用sed解决方案:

sed -e 's/^([0-9.]+)"$|.*/\1/g' < file

应该做的工作