标签: awk

如何在 Perl 中正确调用 awk 打印出一行中的倒数第三个字段?

我的脚本是:

#!/usr/bin/perl -w

my $line="1 2 3 4 5 6 7";
print $line;
my $thirdlast=`print $line |awk '{print $(NF-3)}'`;
print $thirdlast;
Run Code Online (Sandbox Code Playgroud)

输出是:

1 2 3 4 5 6 7   awk: 0602-542 There is an extra ) character.
 The source line is 1.
 The error context is
                {print 201 1 >>>  201NF-3) <<< 
 Syntax Error The source line is 1.
 awk: 0602-502 The statement cannot be correctly parsed. The source line is 1.
        awk: 0602-542 There is an extra ) character. …
Run Code Online (Sandbox Code Playgroud)

perl awk

2
推荐指数
2
解决办法
3万
查看次数

如何过滤grep结果?

我是编写脚本的新手。所以我希望这很简单。我正在编写的脚本用于收集系统信息并将其保存为 html 文件。

当我运行时:

sudo lshw -short
Run Code Online (Sandbox Code Playgroud)

它列出了系统上的所有硬件。

当我运行时:

sudo lshw -short | grep processor
Run Code Online (Sandbox Code Playgroud)

它返回(点代表空格)

/0/4                        ...........................................processor................................................   AMD FX(tm)-6100 Six-Core Processor"
Run Code Online (Sandbox Code Playgroud)

我的问题是如何删除处理器前面的所有内容。或者我如何只显示“处理器”之后的内容。我尝试了 grep 的其他几个选项,并试图找到一个 awk 命令来工作,但我的尝试失败了。

如果需要更多信息,请告诉我。

bash grep awk

2
推荐指数
1
解决办法
6968
查看次数

在 perl 脚本中使用 awk 命令

有人可以建议如何在 perl 脚本中使用命令管道吗?特别是涉及调用的命令awk

我正在尝试创建一个 perl 脚本,该脚本将使用读取磁盘使用情况df -H并返回输出的倒数第二行,其中显示了 %use。在终端中直接输入命令会返回所需的输出。

df -H | awk '{print $(NF-3)}'
Run Code Online (Sandbox Code Playgroud)

此命令返回正确的结果。但是当在反向滴答实用程序中使用相同的命令时,perl 脚本会抛出很多错误。

$thirdlast=`df -H | awk '{print $(NF-3)}'`;
print $thirdlast;
Run Code Online (Sandbox Code Playgroud)

为什么相同的命令没有在脚本中运行?有没有其他方法可以返回所需的结果?

scripts perl awk

2
推荐指数
1
解决办法
1万
查看次数

如何提取一对相同字符之间的文本?

输入:

blah?foobar1?blah
Run Code Online (Sandbox Code Playgroud)

期望的输出:

foobar1
Run Code Online (Sandbox Code Playgroud)

我想获取两个“?”之间的文本 人物。

假设总是有 0 或 2 个“?” 字符,使事情变得更容易。

我尝试了以下操作,但我不知道如何让它知道它是哪个事件:

echo "blah?foobar1?blah" | sed -n '/?/,/?/p'
Run Code Online (Sandbox Code Playgroud)

python perl sed awk text-processing

2
推荐指数
1
解决办法
1332
查看次数

命令未找到错误 awk

command not found在此代码中收到此错误。我想打印一个句子的第一个单词

第一个代码(需要的结果= 1)

abc="1 hello world"; L=$($abc|awk '{print $1}'); echo $L
1: command not found
Run Code Online (Sandbox Code Playgroud)

第二个代码(需要的结果= mp4)

abc="mp4 hello world"; L=$($abc|awk '{print $1}'); echo $L
No command 'mp4' found, did you mean:
 Command 'mpp' from package 'makepp' (universe)
 Command 'mpy' from package 'yorick-mpy-mpich2' (universe)
 Command 'mpy' from package 'yorick-mpy-openmpi' (universe)
 Command 'mpc' from package 'mpc' (universe)
 Command 'm4' from package 'm4' (main)
 Command 'mp4h' from package 'mp4h' (universe)
 Command 'mpv' from package 'mpv' (universe)
 Command 'mpd' …
Run Code Online (Sandbox Code Playgroud)

command-line awk

2
推荐指数
2
解决办法
2万
查看次数

`awk -F':' '$2 ~ "\$" {print $1}' /etc/shadow` 的解释是什么?

我正在使用该命令来获取登录我机器的用户列表,但我无法理解该命令的含义。

awk -F':' '$2 ~ "\$" {print $1}' /etc/shadow
Run Code Online (Sandbox Code Playgroud)

command-line awk text-processing

2
推荐指数
2
解决办法
1486
查看次数

从两个匹配模式之间的文件中提取内容(仅从文件中提取 HTML)

我有包含不同类型文本格式的文件,我的目标是仅提取 HTML 部分并使用此 HTML 代码创建一个文件。我认为使用grepor是可能的awk。我的文件还包含这样的行:

Sender name `<test@email.com>`
Run Code Online (Sandbox Code Playgroud)

我写了这个脚本cat file1.html | grep -E "<[^>]*>"。但问题是它也将行输出为Sender name等。我只想在<html>标签之后提取内容。所以这对我没有用:

Return-Path: <test@test.com>
    for <test@localhost> (single-drop); Thu, 21 Sep 2017 18:34:07 +0400 (+04)
Return-path: <test@test.com>
    (envelope-from <test@test.com>)
References: <test@test.com>
From: test user <test@test.com>
X-Forwarded-Message-Id: <test@test.com>
Message-ID: <test@test.com>
In-Reply-To: <test@test.com>
Run Code Online (Sandbox Code Playgroud)

bash scripts grep awk

2
推荐指数
1
解决办法
3万
查看次数

使用多个键连接两个文本文件

我有两组数据。我想通过两个键值(storm_ID、Cell_ID)加入它们。

第一个数据集看起来像:

Storm_ID,Cell_ID,Wind_speed 
2,10236258,27 
2,10236300,58 
2,10236301,25 
3,10240400,51
Run Code Online (Sandbox Code Playgroud)

第二个数据集看起来像:

Storm_ID,Cell_ID,Storm_surge 
2,10236299,0.27 
2,10236300,0.27 
2,10236301,0.35 
2,10240400,0.35 
2,10240401,0.81 
4,10240402,0.11
Run Code Online (Sandbox Code Playgroud)

现在我想要一个看起来像这样的输出:

Storm_ID,Cell_ID,Wind_speed,Storm_surge 
2,10236258,27,0 
2,10236299,0,0.27 
2,10236300,58,0.27 
2,10236301,25,0.35 
2,10240400,0,0.35 
2,10240401,0,0.81 
3,10240400,51,0 
4,10240402,0,0.11
Run Code Online (Sandbox Code Playgroud)

我尝试在 Linux 中使用 join 命令来执行此任务,但失败了。Join 命令跳过了数据库中不匹配的行。我可以使用 Matlab,但数据大小超过 100 GB,这使得这项任务非常困难。有人可以请指导我吗?我可以使用 SQL 或 python 来完成这个任务。

command-line awk text-processing

2
推荐指数
1
解决办法
252
查看次数

将分钟添加到日期时间列

感谢各种贡献者解决了我之前的请求。

我需要在日期列中添加分钟以获取新的日期时间戳值。我有一个文件:afile.txt

1,2012-02-16,abc,aa,455,340
3,2015-02-16,dsa,dl,350,200
2,2015-02-16,aws,sw,555,180
4,2015-02-16,yyz,aa,1220,210
Run Code Online (Sandbox Code Playgroud)

我使用过 awk(之前由贡献者提供给我)-

awk -F, '/,/ {
    printf "%s, %s, %s, %s, %s %02d:%02d, %s\n",
           $1, $2, $3, $4,
           $2, int($5 / 100), $5 % 100,
           $6
}' afile.txt > bfile.txt

bfile.txt
1, 2012-02-16, abc, aa, 2012-02-16 04:55, 340
3, 2015-02-16, dsa, dl, 2015-02-16 03:50, 200
2, 2015-02-16, aws, sw, 2015-02-16 05:55, 180
4, 2015-02-16, yyz, aa, 2015-02-16 12:20, 210
Run Code Online (Sandbox Code Playgroud)

我想添加第 5 列和第 6 列并获取新的时间戳。

非常感谢您的帮助。

bash perl sed awk 14.04

2
推荐指数
1
解决办法
145
查看次数

在 awk 中使用变量

您好,我想计算特定长度的单词数。我正在使用这个命令。

awk 'length == 2' mydict.txt | wc -l
Run Code Online (Sandbox Code Playgroud)

这段代码给出了我想要的,但如果尝试放置变量而不是数字 2,它就不起作用。代码是这样的

awk 'length == $var' mydict.txt | wc -l
Run Code Online (Sandbox Code Playgroud)

终端打印 0。我能做什么?

awk

2
推荐指数
1
解决办法
724
查看次数

标签 统计

awk ×10

perl ×4

bash ×3

command-line ×3

text-processing ×3

grep ×2

scripts ×2

sed ×2

14.04 ×1

python ×1