AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题

问题[gawk](unix)

Martin Hope
Anuj Tripathi
Asked: 2020-01-28 08:33:51 +0800 CST

如何在awk中动态传递值

  • 0

我正在尝试将包含太多行的 csv 文件拆分为用户定义的块。行数,使用以下脚本,使用awk但它不生成任何输出,文件被创建但它是空白的。请任何人都可以指出缺少什么...

# !/bin/bash
File=filename.csv
count=`awk 'END {print NR}' $File`
i=2
j=5000
k=$j
while [ $j -le $count ]
  do
    awk 'NR==1 {print $0}' $File > output"$i".csv
    awk 'NR==$i, NR==$j {print $0}' $File > output"$i".csv
    i=`expr $j + 1`
    j=`expr $i + $k`
    if [ $j -gt $count ]
      then
        j=$count
        k=`expr 0 - 1`
    elif [ $j -eq $count]
      then
        break
    fi
done
awk gawk
  • 1 个回答
  • 760 Views
Martin Hope
HerpDerpington
Asked: 2020-01-28 07:54:10 +0800 CST

为什么 gawk(有时?)认为 2.0e-318 > 2.0?

  • 3

我正在尝试使用 gawk 找到一列数据的最大值:

gawk 'BEGIN{max=0} {if($1>0+max) max=$1} END {print max}' dataset.dat

dataset.dat看起来像这样:

2.0
2.0e-318

该命令的输出是

2.0e-318

明显小于 2。

我的错误在哪里?

编辑

有趣的是,如果交换输入文件的行,输出变为

2.0

编辑 2

我的 gawk 版本是 GNU Awk 4.2.1,API:2.0(GNU MPFR 4.0.2,GNU MP 6.1.2)。

ubuntu gawk
  • 2 个回答
  • 93 Views
Martin Hope
Chris
Asked: 2020-01-24 07:23:29 +0800 CST

根据另一个文件值替换列中的字符串

  • 0

输入文件:

col01 20083d70-1bf0-40f4-9df9-6247d587c085 text text
col02 d233d76d-e60d-442e-9b44-f0e1dc9ebefb text text
col03 20083d70-1bf0-40f4-9df9-6247d587c085 text text
col04 20083d70-1bf0-40f4-9df9-6247d587c085 text text
col05 b26063fa-93e4-414d-82f2-7c2924c81cc6 text text
col06 dc3e2f9b-05bf-49b4-a63e-c4bc09524eb3 text text
col07 d9f5cf1d-a8f9-488d-b088-b7ad00b67ec6 text text
col08 b26063fa-93e4-414d-82f2-7c2924c81cc6 text text
col09 d9a558ff-494a-4ada-8ec2-e9b2f9178599 text text
col10 b26063fa-93e4-414d-82f2-7c2924c81cc6 text text
col11 b26063fa-93e4-414d-82f2-7c2924c81cc6 text text
col12 4d78f804-18f6-4cc8-98a3-c4aedc60aebf text text
col13 0fe487fe-2ff2-4ca4-adf8-de3c19115dde text text
col14 581207a4-f4a5-4373-806b-0e1f7c298bb1 text text

参考文件:

0fe487fe-2ff2-4ca4-adf8-de3c19115dde group1
20083d70-1bf0-40f4-9df9-6247d587c085 group2
4d78f804-18f6-4cc8-98a3-c4aedc60aebf group3
581207a4-f4a5-4373-806b-0e1f7c298bb1 group4
b26063fa-93e4-414d-82f2-7c2924c81cc6 group5
d233d76d-e60d-442e-9b44-f0e1dc9ebefb group6
d9a558ff-494a-4ada-8ec2-e9b2f9178599 group7
d9f5cf1d-a8f9-488d-b088-b7ad00b67ec6 group8
dc3e2f9b-05bf-49b4-a63e-c4bc09524eb3 group9

预期输出:

col01 20083d70-1bf0-40f4-9df9-6247d587c085(group2) text text
col02 d233d76d-e60d-442e-9b44-f0e1dc9ebefb(group6) text text
col03 20083d70-1bf0-40f4-9df9-6247d587c085(group2) text text
col04 20083d70-1bf0-40f4-9df9-6247d587c085(group2) text text
col05 b26063fa-93e4-414d-82f2-7c2924c81cc6(group5) text text
col06 dc3e2f9b-05bf-49b4-a63e-c4bc09524eb3(group9) text text
col07 d9f5cf1d-a8f9-488d-b088-b7ad00b67ec6(group8) text text
col08 b26063fa-93e4-414d-82f2-7c2924c81cc6(group5) text text
col09 d9a558ff-494a-4ada-8ec2-e9b2f9178599(group7) text text
col10 b26063fa-93e4-414d-82f2-7c2924c81cc6(group5) text text
col11 b26063fa-93e4-414d-82f2-7c2924c81cc6(group5) text text
col12 4d78f804-18f6-4cc8-98a3-c4aedc60aebf(group3) text text
col13 0fe487fe-2ff2-4ca4-adf8-de3c19115dde(group1) text text
col14 581207a4-f4a5-4373-806b-0e1f7c298bb1(group4) text text

现在我可以通过循环实现这sed -i一点while:

$ cat reference|while read a b;do sed -i s/"$a"/"$a($b)"/ input;done

是否可以以更简单的方式完成,仅使用 awk 而不使用 while 循环,在单个 awk 命令处理中使用输入和参考文件仅更改第二列中的值?

awk gawk
  • 1 个回答
  • 40 Views
Martin Hope
jesse_b
Asked: 2020-01-17 12:50:17 +0800 CST

为什么 awk 的 system() 调用会这样?

  • 5

我正在尝试使用 system() 在 awk 中执行 grep,根据手册应该返回正在运行的命令的退出代码。

$ cat foo.txt
bar
$ grep -q bar foo.txt; echo $?
0
$ awk 'BEGIN{ if ( system( "grep -q bar foo.txt" ) ) { print "yes" } else { print "no" } }'
no

如果我删除了,-q我可以看到 grep 确实找到bar了,所以它应该退出 0 并因此打印是,否?

$ awk 'BEGIN{ if ( system( "grep bar foo.txt" ) ) { print "yes" } else { print "no" } }'
bar
no

完全grep从等式中删除:

$ awk 'BEGIN{ if ( system( "true" ) ) { print "yes" } else { print "no" } }'
no
awk gawk
  • 1 个回答
  • 806 Views
Martin Hope
Susheel Busi
Asked: 2020-01-15 04:58:28 +0800 CST

使用任何列中的常用值合并行

  • 1

我有一个如下所示的制表符分隔文件,并希望根据任何列中的匹配项合并行。列数通常为 2,但在某些情况下可能会有所不同,为 3。

输入:

AMAZON NILE 
ALASKA NILE
HELLO MY
MANGROVE AMAZON
MY NAME
IS NAME

所需的输出:

AMAZON NILE ALASKA MANGROVE
HELLO MY NAME IS

一个人怎么能这样awk呢?

这也适用于以下文件吗?输入:

apple_bin2file       strawberry_24files
mango2files      strawberry_39files
apple_bin8file       strawberry_39files
dastool_bin6files  strawberry_40files
apple_bin6file       strawberry_40files
orange_bin004file      dastool_bin004files
orange_bin005file      dastool_bin005files
apple_bin3file       dastool_bin3files
apple_bin5file       dastool_bin5files
apple_bin6file       dastool_bin6files
apple_bin7file       dastool_bin7files
apple_bin8file       mango2files

制表符分隔格式的预期输出:

apple_bin2file strawberry_24files
mango2files strawberry_39files apple_bin8file
dastool_bin6files strawberry_40files apple_bin6file
orange_bin004file dastool_bin004files
orange_bin005file dastool_bin005files
apple_bin3file dastool_bin3files
apple_bin5file dastool_bin5files
apple_bin7file dastool_bin7files

抱歉那些回答的人,我更新了输入文件!

awk gawk
  • 2 个回答
  • 119 Views
Martin Hope
user386465
Asked: 2019-12-16 10:02:44 +0800 CST

awk 部分字符串匹配

  • 1

所以我试图部分匹配一个字段中的字符串,然后将该字段与单独文件中的另一个字段一起使用,

输入示例 -

输入1.txt:

example/world
example/forever

输入2.txt

example123
example234

预期输出.txt:

example123/world
example234/world
example123/forever
example234/forever

所以基本上使用 AWK 将 input1.txt 分成 2 个字段,使用 -

awk -F"/"

这意味着第一行 $1 是example$2 是world

然后example通过部分匹配 input2.txt 中的 $1 来检查 input2.txt 是否包含,然后找到这些匹配项并将它们与 input1 的 $2 组合。

awk gawk
  • 3 个回答
  • 2119 Views
Martin Hope
A S
Asked: 2019-12-11 02:45:12 +0800 CST

处理多个文件时重置 awk 的范围

  • -1

假设我有文件1.txt,2.txt和3.txt,分别具有以下内容:

foo1

Notes

foo2
bar

现在,我想打印出行,这些行放置在模式之后Notes直到文件末尾,并且包含foo或bar模式。为此,我运行以下命令:

awk '/Notes/,/getline==0/ {if (/foo|bar/) {print}}' *txt

但是,该范围似乎会awk在处理第二个文件后立即重置,因为结果如下(仅foo2应bar显示条目):

foo2
bar
foo1
foo2
bar
foo1
foo2
bar

显然,如果我这样做:

for i in $(*txt); do awk '/Notes/,/getline==0/ {if (/foo|bar/) {print}}' $i; done

...一切都会好起来的,但是,当然,我不想awk为每个文件启动一个新进程,所以这不是一个真正的解决方案。

我的问题是,如何告诉awk将此搜索范围应用于掩码/组/Notes/,/NR==0/中的所有文件?*txt

awk gawk
  • 1 个回答
  • 103 Views
Martin Hope
macxpat
Asked: 2019-12-02 21:41:41 +0800 CST

awk : 提取 RegExp 模式匹配的实际值

  • 0

在下面的 awk 代码部分中,file包含一个带有完整 Linux 路径的文件名,其中可能包括backup-YYMMDDYYMMDD 是日期的类型的目录。

我想将 YYMMDD 分配给isDate[file],即isDate[file]=YYMMDD。

我怎样才能做到这一点?

for (file in files) {
        if ( file ~ /(^|\/)(library|labs data|current)(\/|$)/ ) {
           isKeep[file]
        }
        else if ( file ~ /(^|\/)(backup-[0-2][0-9][0-1][0-9][0-3][0-9])(\/|$)/ ) {
            isDate[file]
        }
        else {
            isDelete[file]
        }
}
awk gawk
  • 1 个回答
  • 1058 Views
Martin Hope
ZakS
Asked: 2019-07-09 14:47:03 +0800 CST

从文件的每一行中提取字符串

  • 7

我有一个文件,其中每一行都包含一个句子,其中在字符 > 和 < 之间找到一个单词。例如:

Martin went shopping at >Wallmart< and lost his wallet
French food >tastes< great

我正在寻找一个从 shell 运行的命令,该命令将为每一行打印“>”和“<”中的单词。

提前致谢。

regular-expression gawk
  • 4 个回答
  • 13421 Views
Martin Hope
ScottB
Asked: 2019-06-19 17:38:25 +0800 CST

根据第一列值合并多列

  • 3

我有多个文件(10+)要合并/加入到一个输出文件中,例如:

文件 1

2000 0.0202094
2001 0.0225532
2002 0.02553
2003 0.0261099
2004 0.0280311
2005 0.028843

文件 2

2000 0.0343179
2001 0.036318
2003 0.039579
2004 0.0412106
2005 0.041264

文件 3

2004 0.068689
2005 0.0645474

所有文件都具有相同的两列长度不等。

所需的输出将是:

        file1       file2      file3
2000    0.0202094   0.0343179
2001    0.0225532   0.036318
2002    0.02553
2003    0.0261099   0.0395799
2004    0.0280311   0.0412106   0.0686893
2005    0.028843    0.041264    0.0645474

我尝试了以下代码,但是这些值与第一列不一致:

awk '{printf($1); for(i=2;i<=NF;i+=2) printf ("\t%s", $i); printf "\n"}' <(paste file*) > mergedfile.txt
awk gawk
  • 2 个回答
  • 1273 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve