【问题标题】:Need to convert the below awk command into sed [duplicate]需要将以下 awk 命令转换为 sed [重复]
【发布时间】:2013-05-11 22:16:43
【问题描述】:

我需要将下面的 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

我需要如下输出,

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

【问题讨论】:

  • 真的很好,你的 awk 代码中都有 -F ','$2。但我在您的输入文件中找不到任何逗号。您是否复制了错误的 awk 行?
  • 您有完美的sed 解决方案作为您之前问题的答案,这完全一样......
  • 不,@AdrianFrühwirth,Sed 命令不起作用

标签: linux unix sed awk


【解决方案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,

【讨论】:

  • 嗨@Kent 我错过了在输入文件中添加它。但我希望在第 2 列上执行 sed,而我的 unix 版本不接受 sed -r
  • @GanzRicanz 查看编辑,它应该适用于您的示例。
  • 我只得到空文件。
  • 您从未提及您拥有哪个 sed,只是说“不起作用”。 sed 线在那里。当我使用您的输入文件执行该行时,我复制了我的屏幕。它适用于我的 gnu sed(没有 -r)。如果您有其他 sed 实现,那很好。您可以阅读我的 sed 行,并对其进行调整以适合您的 sed。你已经通过阅读我的代码看到了我的想法,你已经阅读了我的代码,不是吗?我想我不能再帮你了。对不起。
【解决方案2】:

这对我有用:

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

【讨论】:

  • 嗨@Ravoori,如何对特定列使用此命令?
【解决方案3】:

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

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

应该做的工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 2010-10-23
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多