如果我有以下两个日期:
2015-09-12,2015-08-13
Run Code Online (Sandbox Code Playgroud)
我需要获取它们之间的天数,我将使用以下代码:
awk -F'[-,]' '{print 360*($4-$1)+30*($5-$2)+($6-$3)}'
Run Code Online (Sandbox Code Playgroud)
此代码的输出将是,-29而实际上差异是29
中是否有一个常量变量awk,用于存储今天的日期?如果没有,有没有办法可以存储今天的日期以供日常使用?
假设我们有以下文件:
boo,foo,2016-08-30
foo,boo,2016-07-31
Run Code Online (Sandbox Code Playgroud)
我需要将$3文件中的日期与今天的日期进行比较,无论它是什么。
即下面的脚本:
awk -F, '{if($3>"2015-08-23"){print $0}}'
Run Code Online (Sandbox Code Playgroud)
2015-08-23当前日期将在哪里更改。
考虑以下文件:
file1:
boo,8,1024
foo,7,2048
Run Code Online (Sandbox Code Playgroud)
file2:
foo,0,24,154
noo,0,10,561
Run Code Online (Sandbox Code Playgroud)
file3:
24,154,7,1024,0
Run Code Online (Sandbox Code Playgroud)
我需要的是去File1并检查是否$2==7;如果为真,取$1,$2和$3来自File1 ; 现在我必须比较$1来自File1 是否等于$1来自File2;如果为真,我必须从File1中不存在的File2取$3和,然后我必须转到File3并检查from File3是否等于from File2,以及from File3等于from File2;如果是,那么我必须检查是否来自File1$4$1$3$2$4$2等于$3from File3,那么如果这个条件为真,我必须比较$3from File1和$4from File3,如果$3from File1大于$4from File3。
我尝试了以下脚本: …
我有一个文件,其中的值按列组织,并用逗号分隔,如下面的文件所示:
324,01,1,113333600000,1,,
016,01,1,134954200000,1,,
770,01,1,109069200000,1,,
853,01,1,111518800000,1,,
Run Code Online (Sandbox Code Playgroud)
当我使用以下awk命令时,分隔符从逗号更改为空格
代码:
awk -F, '{$4=$4/1024}{print $0}'
Run Code Online (Sandbox Code Playgroud)
输出变为:
324 01 1 110677343.75 1
016 01 1 131791210.93 1
770 01 1 106512890.62 1
853 01 1 108905078.12 1
Run Code Online (Sandbox Code Playgroud)
如何在不更改分隔符的情况下更改字段的值?
我正在使用openssl asn1parse工具 over ,当我尝试使用以下命令解析消息时,RHEL我有自己的 ASN.1 抽象语法文件,称为:TestModule.asn1
openssl asn1parse -inform DER -genconf TestModule.asn1 -in CDRMessage -out test.txt
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Error on line 1 of config file 'TestModule.asn1'
140411047393096:error:0E079065:configuration file routines:DEF_LOAD_BIO:missing equal sign:conf_def.c:362:line 1
Run Code Online (Sandbox Code Playgroud)
请注意,我检查了配置文件,它应该没有错误。
更新:
以下是 TestModule.asn1 文件中前 10 行的列表:
-- File : TestModule.asn1
--
CDRMSG_GA_1040 {iso(1) member-body(2) bsi(826) disc(0) vndr(1249)
Domain (0) charge (5) cDRMSG (1) asn1Module (0)}
DEFINITIONS IMPLICIT TAGS ::=
BEGIN
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。
考虑具有值的文件:
foo
boo
too
Run Code Online (Sandbox Code Playgroud)
还有一个:
foo,1
foo,2
boo,1
soo,1
Run Code Online (Sandbox Code Playgroud)
如何仅从第二个文件中获取第一个匹配项,其中输出为:
foo,1
boo,1
Run Code Online (Sandbox Code Playgroud) 我有以下文件:
6180,6180,0,1,,1,0,1,1,0,0,0,0,0,0,0,0,4326,4326,,0.440000,
6553,6553,0,1,,1,0,1,1,0,0,0,0,1,0,1,0,4326,4326,,9.000000,
1297,1297,0,0,,0,0,1,0,0,0,0,0,1,0,1,0,1707,1707,,7.000000,
6598,6598,0,1,,1,0,1,1,0,0,0,1,0,0,0,0,1390,1390,,0.730000,
4673,4673,0,1,,1,0,1,1,0,0,0,0,0,0,0,0,1707,1707,,0.000000,
Run Code Online (Sandbox Code Playgroud)
我需要一个 awk 命令,它以 18 美元的价格打印出 21 美元的最大值。
所需的输出将如下所示:
6553,6553,0,1,,1,0,1,1,0,0,0,0,1,0,1,0,4326,4326,,9.000000,
1297,1297,0,0,,0,0,1,0,0,0,0,0,1,0,1,0,1707,1707,,7.000000,
6598,6598,0,1,,1,0,1,1,0,0,0,1,0,0,0,0,1390,1390,,0.730000,
Run Code Online (Sandbox Code Playgroud)
我得到了这个结果,但是使用了 sort 命令,如下所示:
sort -t, -k18,18n -k21,21nr | awk -F"," '!a[$18]++'
Run Code Online (Sandbox Code Playgroud)
虽然我想用单个 awk 命令来完成它。
请指教,
例如:给定一个逗号分隔文件"foo"与50每行中的字段,我想打印$0如果$10 !=范围从1001到1010。
我可以使用下面的代码来做到这一点:
awk -F, '{if($10!=1001 && $10!=1002 && $10!=1003 && $10!=1004 && $10!=1005 && $10!=1006 && $10!=1007 && $10!=1008 && $10!=1009 && $10!=1010 ){print $0}}'
Run Code Online (Sandbox Code Playgroud)
然而这种方式容易出错。
可以做到吗?
有没有办法用单行命令打印多个字段?
我想打印 $3 到 $NF,我可以这样做:
awk -F[:] '{print $3,$4,$5 .... $NF}'
Run Code Online (Sandbox Code Playgroud)
然而,对于大量字段,它是不可行的,并且容易出错。
考虑下面的文件,我如何比较两个时间戳,注意时间部分可以忽略不计。
foo,boo,2038-01-18T12:00:00+02:00
foo,boo,2015-09-12T01:31:24+03:00
foo,boo,2015-08-04T03:15:38+03:00
Run Code Online (Sandbox Code Playgroud)
我尝试substring使用以下代码按日期制作它并将其与其他日期进行比较,即: 2015-08-12
awk -F, '{$3=substr($3,1,10)}{if($3<2015-08-12){print $0}}'
Run Code Online (Sandbox Code Playgroud)
但它没有用。
期望的输出:
foo,boo,2015-08-04T03:15:38+03:00
Run Code Online (Sandbox Code Playgroud)
或者:
foo,boo,2015-08-04
Run Code Online (Sandbox Code Playgroud) 请考虑以下文件:
foo,1000,boo,A
foo,1000,boo,B
foo,1001,boo,B
foo,1002,boo,D
Run Code Online (Sandbox Code Playgroud)
我们有以下规则:
If $2 equal 1000, $4 should be equal A
If $2 equal 1001, $4 should be equal B
If $2 equal 1002, $4 should be equal C
Run Code Online (Sandbox Code Playgroud)
我想将上述规则应用于单个awk命令,如果$4不遵守,则打印记录。
所需的输出是:
foo,1000,boo,B
foo,1002,boo,D
Run Code Online (Sandbox Code Playgroud)
我试过:
awk -F, '{if(($2==1000 && $4!=A) || ($2==1001 && $4!=B) || ($4==1002 && $4!=C)){print $0}}'
Run Code Online (Sandbox Code Playgroud) 如何将字段的一部分用于awk脚本?
输入文件:
123456789,0,0,4,1,6,8,6
987654321,0,0,8,4,6,9,8
251335549,8,9,6,3,1,8,8
897465419,8,1,8,9,4,7,9
Run Code Online (Sandbox Code Playgroud)
我需要选择 , 的第三个字符$1以将其应用于某个操作。
例子:
$9 = (3rd character from $1) - 3
Run Code Online (Sandbox Code Playgroud) 我有两个文件,其中一个有 10 条记录,另一个有 15 条记录,问题是当我将cat它们放在一起时,总是FNR=NR.
例如,考虑以下文件:
文件1:
1,boo
2,foo
3,boo
Run Code Online (Sandbox Code Playgroud)
文件2:
1,boo
2,foo
3,boo
4,foo
Run Code Online (Sandbox Code Playgroud)
应用以下代码时:
cat File1 File2 | awk -F, '{print FNR}'
Run Code Online (Sandbox Code Playgroud)
结果应该是:
1
2
3
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
但我实际上拥有的是FNR= 1 到 7。