-1

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

下面是我的输入文件:

示例.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

我需要如下输出,

输出.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 行被删除。

4

3 回答 3

1

正如我评论的那样, awk 单行代码对您的输入文件没有意义。但是你可以试试这个 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,
于 2013-05-11T22:39:27.690 回答
0

这对我有用:

sed -e 's/^\([0-9]\+\(\.[0-9]\+\)*\)"$/\1/g' \
-e '/^\([0-9]\+\(\.[0-9]\+\)*\)$/! s/^.*$//g' sample.txt
于 2013-05-11T22:33:50.837 回答
0

您可以同时使用 awk 和 sed。由于我的手机上没有 Linux (shell),我将尝试提供 sed 解决方案:

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

应该做的工作

于 2013-05-12T00:12:41.600 回答