3

鉴于此数据

34 foo
34 bar
34 qux
62 foo1
62 qux
78 qux 

如果它是“qux”,我想将第二列的字符串替换为“”。结果:

34 foo
34 bar
34 
62 foo1
62 
78  

你如何用 sed 做到这一点?特别是数据非常大,大约 10^7 行

4

3 回答 3

15

我实际上会这样做,sed因为这不是这项工作的最佳工具。每当有人提到专栏时,该awk工具是我的首选工具。

cat file | awk '$2 == "qux" { print $1 } $2 != "qux" { print $0 }'

或最简单的形式:

cat file | awk '{ if ($2 == "qux") {$2 = ""}; print }'

如果您必须使用sed

cat file | sed 's/  *qux *$//'

确保您使用正确的空格(以上仅使用空格)。

于 2009-04-02T02:38:26.777 回答
3

没有尾随空格:

sed 's/qux$//' < file

如果它必须在第二列(可能超过三列):

sed 's/\([0-9][  ]*\)qux\(.*\)/\1\2/'

(请注意,有一个文字制表符和空格;sed 不匹配带有 '\t' 的制表符;

但 awk 更适合表格数据:

awk '{ if ($2 == "qux") {$2 = ""; print} else { print }; }' < file
于 2009-04-02T02:37:08.497 回答
1
 nawk '{ gsub( /qux/, " " ); print }' filename
于 2011-10-19T06:44:58.443 回答