我正在创建一个脚本,用于收集上个月用于报告的信息:
到目前为止,我有以下变量:
#I used an array to get the previous month.
set -A months Dec Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov
x=`date +%m`
y=`expr $x - 1`
year=`date +%Y`
month=`perl -MPOSIX=strftime -le '@t = localtime; $t[3] = 1; $t[4]--;print strftime("%m", @t)'`
month_abv=`echo ${months[$y]}`
Run Code Online (Sandbox Code Playgroud)
变量输出:
year=2017
month=04
month_abv=Apr
Run Code Online (Sandbox Code Playgroud)
我现在需要的只是上个月的最后一天。
我正在尝试在 AIX 系统上按正确的顺序按 3 个不同的列进行排序。
下面是一个较大文件的摘录,显示了开括号之间的最长运行时间,例如(0 小时 0 分钟 1.030 秒)。请记住,第一列不会按顺序排列,因为文件的输出是并行运行的。下面是我从 2500 行中提取的 10 个运行时间最长的进程。现在我想对运行时间最长的前十个进程从最短时间到最长时间进行排序:
2023-01-04 12:32:08: Table seqhi completed (0 hrs 0 mins 1.020 Secs)
2023-01-04 12:32:09: Table iinvd completed (0 hrs 0 mins 1.028 Secs)
2023-01-04 12:32:10: Table iaudl completed (0 hrs 0 mins 1.030 Secs)
2023-01-04 12:32:11: Table ccdd_save completed (1 hrs 0 mins 1.021 Secs)
2023-01-04 12:32:13: Table upi_brordrep_tmp_aj completed (0 hrs 0 mins 1.028 Secs)
2023-01-04 12:32:07: Table srdel completed (0 hrs 2 mins 1.592 …Run Code Online (Sandbox Code Playgroud) 我在下面有一个示例,如果第 9 列的值小于 8,则需要替换它,否则使用 sed 或 awk 函数退出或忽略:
) in datadbs extent size 16 next size 4 lock mode row;
Run Code Online (Sandbox Code Playgroud)
如果我使用下面的 awk 函数,它只会在第 9 列中打印我需要的值,但我仍然想保持句子结构。
echo ") in datadbs extent size 16 next size 4 lock mode row;" |
awk '{if ($9 < 8 ) print 8;}'
Run Code Online (Sandbox Code Playgroud)
输出:
8
Run Code Online (Sandbox Code Playgroud)
我想要的是以下内容:
) in datadbs extent size 16 next size 8 lock mode row;
Run Code Online (Sandbox Code Playgroud) 我想为用于备份的目录创建一个清理脚本。
例如:我在一个目录中有 10 个文件,它们在文件名中包含编号
如:
b_100
b_101
b_102
b_103
b_104
b_105
b_106
b_107
b_108
b_109
b_110
Run Code Online (Sandbox Code Playgroud)
我想对目录中从 b_105 到 b_110 的特定文件进行 grep 并删除所有其余文件。意思是 b_100 b_101 b_102 b_103 b_104 都将被移除/删除。
如果我想在像 b_110 这样的目录中搜索一个文件,那么删除所有没有搜索到的内容。
我有一个场景,我需要打印一行,但使用 awk 如果要搜索一个数字,则附加一个带有更多数字的双冒号:
请参见下面的示例:
test1 test2 37:375003 test3 test4
test1 test2 38:375004 test3 test4
test1 test2 39:375005 test3 test4
test1 test2 40:375006 test3 test4
test1 test2 41:375007 test3 test4
Run Code Online (Sandbox Code Playgroud)
我想要实现的是使用如下命令:
cat test_out.txt | awk "{if ($3 == 37~/\:*/ ) print $0;}"
Run Code Online (Sandbox Code Playgroud)
上面应该给我以下行:
test1 test2 37:375003 test3 test4
Run Code Online (Sandbox Code Playgroud)
得到下面的语法错误:
Syntax Error The source line is 1.
The error context is
{if ( >>> == <<<
awk: 0602-502 The statement cannot be correctly parsed. The source line is 1.
Run Code Online (Sandbox Code Playgroud)