Bash

將多行的內容收集到一個輸出中

  • June 25, 2018

假設我有一個包含大量內容的文本文件,包括以下行:

...    
...
ABCD1 1234 12345
XYZ
foo bar 1234597890
...
DEFG2 5678 56789
XYZ
foo bar 0987654321
...
...

我需要通過使用提取查找數據序列grep -C1 "XYZ"。現在我需要做的是,組裝看起來像這樣的輸出:

ABCD1 1234567890 12345 1234
DEFG2 0987654321 56789 5678

我知道我可以用grep -z "XYZ"它來擺脫“我不在乎”這一行,並用awk它來從一行中提取數據以按照我想要的方式組裝它。但我缺少的是:如何在比賽行的加號/n之前刪除一行?這樣我就可以將單行上的數據傳輸到?grep``grep``awk

做整個事情會更優雅awk,但如果你想要一些快速和骯髒的東西,那麼你可以將awk記錄分隔符設置為等於grep組分隔符 - 然後按你想要的順序列印你想要的空格分隔欄位想:

grep -C1 XYZ file | awk -vRS='\n--' '{print $1, $NF, $3, $2}'
ABCD1 1234597890 12345 1234
DEFG2 0987654321 56789 5678

引用自:https://unix.stackexchange.com/questions/451871