我正在编写一个脚本,其中我需要测试一个字符串,并根据其结果我将决定是否进一步进行。
下面的命令工作正常(如果字符串以“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,
鲍勃
我希望能够打印 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 变量。有任何想法吗?
假设我有两个文件,如下所示:
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 并提供其输入。
我有一个这样的日志文件:
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 但我不知道如何
谢谢朋友。
我正在尝试使用 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,
鲍勃