gpt4 book ai didi

linux - 如何打印前n列和与模式匹配的列?

转载 作者:太空宇宙 更新时间:2023-11-04 04:37:46 25 4
gpt4 key购买 nike

我有一个包含 n 行和 m 列的制表符分隔文件,我想打印前三列并搜索模式并打印该列(如果存在)。我尝试在 sed 中搜索和打印,但无法打印前 3 列,然后搜索模式。

示例我有类似的文件

col1    col2    col3    col4    col5    col6
test 23 2323 32 635 36354
test2 354 35b 345 345 555
test4 486 g4 435 0.43 34
test5 0.6 35 0.34 0.234 34563

我想要的输出是(例如,如果我搜索的模式是“col6”)

col1    col2    col3    col6
test 23 2323 36354
test2 354 35b 555
test4 486 g4 34
test5 0.6 35 34563

最佳答案

您可以在 awk 读取第一行时遍历字段并确定存在哪个字段 col6

NR==1 {
for (i=1; i<=NF; i++)
if ($i == "col6")
column=i
}
{
print $1, $2, $3, column ? $column : ""
}
<小时/>

它有什么作用?

  • NR==1如果当前读取的记录(行)数为1,则迭代NF个字段

    • if ($i == "col6") 如果当前列等于我们搜索的字符串,我们将其保存在变量 column 中。
  • 打印$1、$2、$3,列? $column : "" 打印前三个字段。 column 字段仅在设置时才会打印,如果未设置则打印空“”。

<小时/>

示例

$ awk 'NR==1{ for (i=1; i<=NF; i++)if ($i == "col6") column=i}{print $1, $2, $3, column ? $column : ""}' file
col1 col2 col3 col6
test 23 2323 36354
test2 354 35b 555
test4 486 g4 34
test5 0.6 35 34563

关于linux - 如何打印前n列和与模式匹配的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41604895/

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