gpt4 book ai didi

regex - 使用 shell 脚本将正则表达式应用于 TSV 格式的单列

转载 作者:行者123 更新时间:2023-12-02 03:06:08 26 4
gpt4 key购买 nike

我有一个 TSV 文件,我想将其传输到脚本中并仅修改一列(就地)并保持其余数据不变。

示例行:

column1 column2 1   2   3

例如,我想将正则表达式应用于column2(但将其保留在适当的位置)

更新我认为我在原来的帖子中没有说得很清楚,我实际上想在同一列上进行两次替换

我的一个非常简单的尝试是

while read line; do
echo $line | cut -f2 | sed 's/col/something_else/g' | sed 's/mn//g'
done

这会修改我想要的列。但我无法从原始行重新创建其余数据。我可以很好地使用awk(尽管我不太熟悉它)。真正的要求是在 shell 命令中运行它(在 Linux 上)

期望的输出是

column1 something_else2 1   2   3

最佳答案

gnu awk 支持就地编辑,因此您只需使用此命令并将更改保存回文件:

awk -i inplace 'BEGIN{FS=OFS="\t"} {
sub(/col/, "something_else", $2); sub(/mn/, "", $2)} 1' file

以下是 awk 命令详细信息:

  • -i inplace 启用 gnu awk 中的就地编辑
  • -F '\t':使用制表符作为输入字段分隔符
  • $n 表示记录中的第 n 列,因此 $2 变为第二列
  • 1awk 中打印完整记录的默认操作

如果您不使用 gnu awk 则使用:

awk 'BEGIN{FS=OFS="\t"} {
sub(/col/, "something_else", $2); sub(/mn/, "", $2)} 1' file>file.tmp && mv file.tmp file

另一个选择是使用 sed 进行就地编辑:

sed -i.bak -E $'s/^([^\t]+\t)col/\\1something_else/' file

关于regex - 使用 shell 脚本将正则表达式应用于 TSV 格式的单列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58959650/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com