假设我有一个包含大量内容的文本文件,包括如下行:
...
...
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
答案1
在 中完成整个事情会更优雅awk
,但是如果您想要一些快速而肮脏的东西,那么您可以将awk
记录分隔符设置为等于grep
组分隔符 - 然后按照您想要的顺序打印您想要的空白分隔字段想:
grep -C1 XYZ file | awk -vRS='\n--' '{print $1, $NF, $3, $2}'
ABCD1 1234597890 12345 1234
DEFG2 0987654321 56789 5678