我有一个要求。我正在编写 awk 脚本,我的输入文件是
TIME FIELD : SOME FIELDS SOME FIELDS Some fields Some fields RID ..
RID 的出现是随机的,它从一条记录到另一条记录有所不同,因此问题是我将无法使用 NR 和 $1 概念,因为不能保证 RID 会在此特定行中发生
我需要同时提取时间字段和 RID。我可以在两个文件遍历中做到这一点,但任何想法如何使用 awk 在单个文件遍历中做到这一点。谢谢
在 AWK 中执行此操作(假设时间字段中没有任何空格或冒号):
awk -F '[: ]' '{for (i = 2; i <= NF; i++) {if ($i ~ /^RID/) {rid = $i}}; print $1, rid}' inputfile
仅使用没有显式循环的正则表达式:
awk -F ':|RID=' '{split($3, a, " "); print $1, "RID=" a[1]}'
像这样的东西可以工作:
sed 's,^\([^:]*\):.*\(RID=[[:alnum:]]*\).*$,\1 : \2,'
它要求 TIME FIELD 不包含任何冒号,所以如果是这种情况,请指定一个具体示例。
我正在玩这个输入:
$ echo 'TIME FIELD : SOME RID=62 FIELDS SOME FIELDS Some fields Some fields
TIME FIELD : SOME FIELDS SOME FIELDS Some fields Some fields RID=012
TIME FIELD : SOME FIELDS RID=5672 SOME FIELDS Some fields Some fields
TIME FIELD : SOME RID=62 FIELDS SOME FIELDS Some fields Some fields' |
sed 's,^\([^:]*\):.*\(RID=[[:alnum:]]*\).*$,\1 : \2,'
TIME FIELD : RID=62
TIME FIELD : RID=012
TIME FIELD : RID=5672
TIME FIELD : RID=62