使用awk / sed / cut / grep

时间:2018-08-09 21:09:11

标签: linux bash parsing split

我想从文本文件中提取一些成对的分隔字段/值,它们可能出现在行或段落的任何位置。该文件可能包含几个长或短的段落。我希望输出是每个文件仅一行或每次出现的行。我已经执行了几种选择,其中我设法获得了第一次出现的字段名或第二次出现的字段名,但不是两个都出现。我可以通过一个“ pass”获得N个字段名称,然后我需要为以下与订单相关的字段名称运行第二个字段名称。 有什么建议可以在一行命令中完成?

Text File 1
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed faucibus orci justo, quis faucibus arcu scelerisque molestie. 
Curabitur :Field1 Value1: lacus at scelerisque :Field2 Value2: aliquam. Aenean mattis elit et magna volutpat, eu finibus justo cursus. 
Etiam non cursus nisi. Donec urna nulla, convallis ut velit sit amet, accumsan faucibus urna. :Field1 Value2: lacinia lectus :Field3 Value2: bibendum ligula dictum gravida. Duis eget metus sed lorem scelerisque varius. 

Text File 2
Duis leo sem, placerat eget :Field3 Value1: volutpat eget, condimentum at odio. Ut iaculis tincidunt massa, in :Field1 Value2: accumsan nulla bibendum quis. Sed tincidunt justo sit amet est bibendum mollis. Fusce gravida nunc a nibh blandit ullamcorper. Aliquam auctor laoreet pellentesque :Field1 Value1:
Quisque tempor ultrices congue.
Mauris feugiat est sed neque malesuada tincidunt. Pellentesque fringilla, nunc vitae porta tempor, mauris felis ultricies eros, ac hendrerit lacus odio et nisi. Vivamus cursus lacinia nunc, a mollis mi hendrerit a. Nunc commodo dui nec iaculis fringilla.

Desired output for Text File 1

FieldName1 Value2 FieldName2 Value2  FieldName1 Value1  FieldName3 Value2

FieldName1 Value2   
FieldName2 Value2
FieldName1 Value1
FieldName3 Value2

Desired output for Text File 2

FieldName3 Value1  FieldName1 Value2  FieldName1 Value1

FieldName3 Value1
FieldName1 Value2
FieldName1 Value1

1 个答案:

答案 0 :(得分:-1)

如果将冒号用作字段分隔符,则会发现占位符是编号为偶数的字段:

awk -F: '{for (i=2; i<=NF; i+=2) print $i}' file

将为您提供大部分帮助。