标签: awk

在 bash 脚本中使用 awk 和 if

我正在编写一个脚本,其中我需要测试一个字符串,并根据其结果我将决定是否进一步进行。

下面的命令工作正常(如果字符串以“Clean”开头,它将打印 1,否则打印 0)。

echo | awk ' {print index("'"${task}"'", "Clean")}'
Run Code Online (Sandbox Code Playgroud)

我想做的是在 BASH 脚本中使用 AWK 和 IF 。基于这篇文章,我做了以下工作:

idx=$(awk '{print index("'"${task}"'", "Clean")}')
echo $idx
if [ "$idx" == "0" ]; then
   echo hello
fi
Run Code Online (Sandbox Code Playgroud)

正如我所说,当我运行脚本时,它会打印“0”,但第二个“echo”不会打印任何内容,当然 if 也不起作用。

谁能帮我?

TIA,

鲍勃

scripting bash awk

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

bash 脚本 - 从第 N 行打印到 EOF

我希望能够打印 bash 中的行数:行号(从顶部开始计算)-> 文件结尾

似乎 tail 只会从底部开始计算行数。

有谁知道如何做到这一点?谢谢。

我试过以下

# Where $1 is the file I'm reading in

# Get line number of error:
LINENUM=$( grep -n "$LAST_ERROR_DATE" $1 | egrep $LOG_THRESHOLD | grep $LAST_HOUR: | sed 's/:/ /g' | awk '{print $1}' | head -n 1 )

echo $LINENUM

# This returns 995

# Print everything from linenumber downwards
MESSAGE=$( awk 'NR >= $LINENUM' $1 )
Run Code Online (Sandbox Code Playgroud)

当我手动弹出 995 到 awk 而不是 $LINENUM 时,这有效,它似乎没有读取我的 bash 变量。有任何想法吗?

bash awk sed unix-shell

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

寻找一个棘手的一个班轮来获得 awk 输出的差异

假设我有两个文件,如下所示:

file1

a 23
b 34
c 47

file2
a justin_beiber_sucks
b segmentation fault
c jackson
d nop
Run Code Online (Sandbox Code Playgroud)

现在我想要的是获得两个文件的第一列的差异。我现在正在做

$cat file1 awk '{print $1}'> f1
$cat file2 awk '{print $1}'> f2
$diff -u f1 f2
Run Code Online (Sandbox Code Playgroud)

但是这种方法感觉很迟钝。有什么棘手的方法吗?

问题是我总是将pipes 视为一维的东西,但这里是二维的。我的意思是 diff 的输入必须同时来自两个不同的来源。

起点可能是 awk 脚本将读取两个文件,进行过滤并将结果保存在临时关联数组中,接下来它将调用 diff 并提供其输入。

linux shell awk diff

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

从 awk 结果中删除带有 iptables 的 ips

我有一个这样的日志文件:

Frq:15 IP:0.0.0.0 Date: 2014-03-21 12:19:31 AM
Frq:9 IP:198.252.206.25 Date: 2014-03-21 12:19:31 AM
Run Code Online (Sandbox Code Playgroud)

现在我用 awk 得到一列 ip 地址:

cat /tmp/test | awk '{print $2}'|awk '{gsub("IP:", "");print}' 
Run Code Online (Sandbox Code Playgroud)

结果是:

0.0.0.0
198.252.206.25
Run Code Online (Sandbox Code Playgroud)

我想将此 ip 地址添加到 iptables 以从 INPUT DROP 但我不知道如何

谢谢朋友。

ip iptables awk filter

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

使用 awk 解析 java 控制台输出

我正在尝试使用 awk 来解析由 Java 应用程序生成的输出,但它不起作用。似乎管道后的命令无法获取/查看java应用程序抛出的数据。

我正在执行以下命令(使用命令生成的返回):

[root@localhost]# java -jar jmxclient.jar usr:pass host:port java.lang:type=Threading ThreadCount
06/11/2010 15:46:37 -0300 org.archive.jmx.Client ThreadCount: 103
Run Code Online (Sandbox Code Playgroud)

我需要的只是字符串的最后一部分。所以我正在尝试使用 awk(行尾有管道|awk -F ':' '{print $4}'

[root@localhost]# java -jar jmxclient.jar usr:pass host:port java.lang:type=Threading ThreadCount|awk -F ':' '{print $4}'
Run Code Online (Sandbox Code Playgroud)

但是输出没有被解析。它抛出整个字符串:06/11/2010 15:46:37 -0300 org.archive.jmx.Client ThreadCount: 103

我也尝试使用|cut -f4 -d":"相同的结果:未解析字符串。

所以我的问题是,如何解析输出以便仅获取字符串末尾的数字?

TIA,

鲍勃

shell awk

0
推荐指数
1
解决办法
1458
查看次数

标签 统计

awk ×5

bash ×2

shell ×2

diff ×1

filter ×1

ip ×1

iptables ×1

linux ×1

scripting ×1

sed ×1

unix-shell ×1