我有一个带有制表符分隔字段(或列)的文件,如下所示:
cat abc_table.txt
a b c
1 11;qqw 213
2 22 222
3 333;rs2 83838
Run Code Online (Sandbox Code Playgroud)
我想删除“;”之后的所有内容 仅在第二个字段上。
我试过
awk 'BEGIN{FS=OFS="\t"} NR>=1 && sub (/;[*]/,"",$2){print $0}' abc_table.txt
Run Code Online (Sandbox Code Playgroud)
但它似乎不起作用。我也尝试过 sed:
's/;.*//g' abc_table.txt
Run Code Online (Sandbox Code Playgroud)
但它也会删除第三个字段中的字符串:
a b c
1 11
2 22 222
3 333
Run Code Online (Sandbox Code Playgroud)
所需的输出是:
a b c
1 11 213
2 22 222
3 333 83838
Run Code Online (Sandbox Code Playgroud)
如果有人可以帮助我,我将不胜感激!
您需要简单地更正正则表达式。
awk '{sub(/;.*/,"",$2)} 1' Input_file
Run Code Online (Sandbox Code Playgroud)
如果您有 Input_file TAB 分隔,请尝试:
awk 'BEGIN{FS=OFS="\t"} {sub(/;.*/,"",$2)} 1' Input_file
Run Code Online (Sandbox Code Playgroud)
OP 正则表达式中的问题: OP 的正则表达式在第二个字段中;[*]
寻找;
和*
(文字字符),这就是为什么它不能;
在第二个字段中替换所有内容。我们需要简单地给出;.*
这意味着从;
第二个字段的第一次出现到最后一个获取所有内容,然后在第二个字段中用 NULL 替换。