gpt4 book ai didi

awk - 如何将文本文件中的特定单元格左移

转载 作者:行者123 更新时间:2023-12-05 02:30:30 27 4
gpt4 key购买 nike

我有一个非常大的文本文件(制表符分隔,第一行是标题),如下所示:

A1  A2  A3  A4  A5  A6  A7  
FA1 AB 234 231 0.02 456 I
FA2 ACE 241 2154 0.1 324 O
FA3 AD AC 150 2367 0.02 123 I
FA AFQ ASB 123 2473 0.4 630 I

如您所见,第 3 列第 3 行和第 4 列 (A3) 处有两个字符串。你能帮我解决一下如何使用 awk、sed 或任何 Linux 代码删除这些字符串并移动剩余的单元格以获得更正的文件,例如:

A1  A2  A3  A4  A5  A6  A7
FA1 AB 234 231 0.02 456 I
FA2 ACE 241 2154 0.1 324 O
FA3 AD 150 2367 0.02 123 I
FA AFQ 123 2473 0.4 630 I

我试过:

awk 'if($3!~/[0-9]+/') $3=$4}1', file

它删除第 3 列中的所有字符串并用第 4 列替换它们,但不向左移动单元格。

最佳答案

使用sed

$ sed '1!s/^\([^ ]* \+[^ ]* \+\)[A-Z][^ ]* \+/\1/' input_file
A1 A2 A3 A4 A5 A6 A7
FA1 AB 234 231 0.02 456 I
FA2 ACE 241 2154 0.1 324 O
FA3 AD 150 2367 0.02 123 I
FA AFQ 123 2473 0.4 630 I

1! - 不匹配第 1 行

^\([^ ]*\+[^ ]*\+\) - 使用反向引用,我们可以将括号的内容存储到内存中,这将匹配直到第二个的所有内容空间。

[A-Z][^ ]*\+ - 任何不在括号内的内容都将从匹配的返回中排除。如果第三列包含大写字母字符,则排除直到下一个空格的所有内容。

\1 - 返回括号内捕获的任何内容

关于awk - 如何将文本文件中的特定单元格左移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71830102/

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