我有一个要求。我正在编写awk脚本,我的输入文件是
TIME FIELD : SOME FIELDS SOME FIELDS Some fields Some fields RID ..
RID的出现是随机的,它从一个记录到另一个记录不一样,所以问题是我将无法使用NR和$ 1概念,因为无法保证RID会在此特定行中出现
我需要提取时间字段和RID。我可以在两个文件遍历中做到这一点,但任何想法如何使用awk在单个文件遍历中进行。谢谢
答案 0 :(得分:0)
这样的事情可行:
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
答案 1 :(得分:0)
在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]}'