解析空格分隔的行

时间:2014-12-08 05:17:44

标签: awk grep

我想解析空格分隔的行。文字是这样的:

Record: 123456 xyz-1.1.1
     Item       Date
     abc        05-DEC-14
     ijk        05-DEC-14

Record: 987654 abc-2.2.2
     Item       Date
     xyz        06-DEC-14
     bcd        06-DEC-14

Record: 567890  stu-3.3.3
     Item       Date
     rst        04-DEC-14
     mno        04-DEC-14

我需要显示一个记录号和它下面的项目。我该怎么办?

预期输出是使用其Items提取上述Record#之一。我想根据应用名称提取它,上面的示例是" xyz"," abc"和" stu"。例如,

Record: 987654 abc-2.2.2
         Item       Date
         xyz        06-DEC-14
         bcd        06-DEC-14

5 个答案:

答案 0 :(得分:2)

awk '/ abc-/' RS=

输出

Record: 987654 abc-2.2.2
     Item       Date
     xyz        06-DEC-14
     bcd        06-DEC-14

答案 1 :(得分:1)

$ awk -v RS= -F'\n' -v app="abc" '$1 ~ " "app"-"' file
Record: 987654 abc-2.2.2
     Item       Date
     xyz        06-DEC-14
     bcd        06-DEC-14

答案 2 :(得分:0)

这是你期望的吗?

$ awk '$1=="Record:"{printf "%s ", $2}$1=="Item"{print $2}' file
123456 Date
987654 Date
567890 Date

答案 3 :(得分:0)

那就更好了,这就是你需要的。

使用不同的值设置键,您将得到结果。

key="987654"
awk 'BEGIN{RS="";FS="\n";key="'$key'"}{split($1,a,OFS);if (key==a[2]) print}'  infile

Record: 987654 abc-2.2.2
     Item       Date
     xyz        06-DEC-14
     bcd        06-DEC-14

key="123456"
awk 'BEGIN{RS="";FS="\n";key="'$key'"}{split($1,a,OFS);if (key==a[2]) print}'  infile

Record: 123456 xyz-1.1.1
     Item       Date
     abc        05-DEC-14
     ijk        05-DEC-14

答案 4 :(得分:0)

使用sed:

sed -n -r '/Record.*xyz/,/^$/p' File 

(同样适用于abc& stu)

示例:

# cat File
Record: 123456 xyz-1.1.1
     Item       Date
     abc        05-DEC-14
     ijk        05-DEC-14

Record: 987654 abc-2.2.2
     Item       Date
     xyz        06-DEC-14
     bcd        06-DEC-14

Record: 567890  stu-3.3.3
     Item       Date
     rst        04-DEC-14
     mno        04-DEC-14
[root@CFPU-0(RNC-91) /root/umwdma_mt]
# sed -n -r '/Record.*abc/,/^$/p' File
Record: 987654 abc-2.2.2
     Item       Date
     xyz        06-DEC-14
     bcd        06-DEC-14

[root@CFPU-0(RNC-91) /root/umwdma_mt]
# sed -n -r '/Record.*xyz/,/^$/p' File
Record: 123456 xyz-1.1.1
     Item       Date
     abc        05-DEC-14
     ijk        05-DEC-14

[root@CFPU-0(RNC-91) /root/umwdma_mt]
# sed -n -r '/Record.*stu/,/^$/p' File
Record: 567890  stu-3.3.3
     Item       Date
     rst        04-DEC-14
     mno        04-DEC-14

<强>逻辑:

从包含“Record”的行和“abc”或“stu”或“xyz”模式打印到空行。