2014-12-08 53 views
0

我想解析空格分隔的行。文字是這樣的:解析出空格分隔的行

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 

我需要顯示一個記錄號和它下面的項目。我該怎麼做?

預期的輸出是提取其中一個上述記錄#及其項目。我想在上面例子中的應用名稱爲「xyz」,「abc」和「stu」的基礎上提取它。對於例如

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

向我們展示了預期的輸出。 – BMW 2014-12-08 05:19:19

+0

「提取上述記錄之一」是什麼意思?你想要記錄號碼「987654」嗎? – 2014-12-08 05:32:28

回答

0

是您期望的嗎?

$ awk '$1=="Record:"{printf "%s ", $2}$1=="Item"{print $2}' file 
123456 Date 
987654 Date 
567890 Date 
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 
+1

得到了你的觀點。 – BMW 2014-12-08 06:08:31

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 
+1

太好了。乾杯。 – BMW 2014-12-08 05:47:04

+1

完美!爲我工作...謝謝 – andys2cool 2014-12-08 05:51:37

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 
[[email protected](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 

[[email protected](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 

[[email protected](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 

邏輯:從含有「記錄」和圖案「ABC」或「STU」或「XYZ」,直到空行線

打印。

2
awk '/ abc-/' RS= 

輸出

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