Linux 需要将下面的awk命令转换为sed
我需要将下面的awk命令转换为sed,Linux 需要将下面的awk命令转换为sed,linux,unix,sed,awk,Linux,Unix,Sed,Awk,我需要将下面的awk命令转换为sed, awk-F',''$2~/^*[0-9]*(\.[0-9]+)?“*$/{sub(/“/,”,'',$2);打印$2}' 下面是我的输入文件: sample.txt: 3“,3” 6位,6位 7'4英寸到10'3-1/2英寸,7'4英寸到10'3-1/2英寸 4.8“,4.8” 可从99英寸调整至111英寸最大值148,可从99英寸调整至111英寸最大值148 我需要如下输出, output.txt: 3”,3 6位, 7'4英寸到10'3-1/2英寸,
awk-F',''$2~/^*[0-9]*(\.[0-9]+)?“*$/{sub(/“/,”,'',$2);打印$2}'
下面是我的输入文件:
sample.txt:
3“,3”
6位,6位
7'4英寸到10'3-1/2英寸,7'4英寸到10'3-1/2英寸
4.8“,4.8”
可从99英寸调整至111英寸最大值148,可从99英寸调整至111英寸最大值148
我需要如下输出,
output.txt:
3”,3
6位,
7'4英寸到10'3-1/2英寸,
4.8”,4.8
可从99英寸调整到111英寸-最大值148,
因此,基本上我需要打印“符号”的数字值,其他非数字文本需要替换为空行,awk命令的问题是2、3和5行被删除。这对我有效:
sed -e 's/^\([0-9]\+\(\.[0-9]\+\)*\)"$/\1/g' \
-e '/^\([0-9]\+\(\.[0-9]\+\)*\)$/! s/^.*$//g' sample.txt
正如我所评论的,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,
您可以同时使用awk和sed来执行此操作。 由于我的手机上没有Linux(shell),我将尝试使用一个sed解决方案:
sed -e 's/^([0-9.]+)"$|.*/\1/g' < file
sed-e的/^([0-9.]+)“$|.*/\1/g”
这项工作应该做得很好,你的awk代码中有
-F'、'
,还有$2
。但是我在你的输入文件中找不到任何逗号。您是否复制了错误的awk行?您有完美的sed
解决方案作为您先前问题的答案,这完全相同…不@AdrianFrühwirth,sed命令不起作用Hi@Ravoori,如何对特定列使用此命令?Hi@Kent我没有在输入文件中添加该命令。但是我希望在第2列上执行sed,而我的unix版本不接受sed-r@GanzRicanz请参阅编辑,它应该适用于您的示例。我只得到一个空文件。您从未提到您有哪个sed,只需说“不起作用”。sed线在那里。当我用你的输入文件执行那一行时,我复制了我的屏幕。它与我的gnu sed(不带-r)一起工作。如果您有其他sed实现,则可以。您可以阅读我的sed行,并调整它以适合您的sed。你已经通过阅读我的代码看到了我的想法,你已经阅读了我的代码,不是吗?我想我不能再帮你了。很抱歉