我想解析空格分隔的行。文字是这样的:
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
答案 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”模式打印到空行。