我在文件中使用以下格式的数据
Section : A1234,
Name : ABCBDEDF,
Medium : English ,
Age : No,
Name : Reporting,
Age : No
Section : XYSZA,
Name : Work,
Age : YES
我正在尝试以下列格式获取数据: -
Section : A1234,Name : ABCBDEDF,Age : No
Section : A1234,Name : Reporting,Age : No
Section : XYSZA,Name : Work,Age : YES
我尝试了几个sed和awk语句,但我只能将所有行合并在一起。
awk '{key=$0; getline; print key "" $0;}' test.txt
感谢任何帮助。
答案 0 :(得分:1)
关注awk
可能对您有帮助。
awk '/Section/{val1=$0;next} /Name/{val2=$0;next} /Age/{sub(/,/,"");print val1 val2 $0;}' Input_file
编辑: 由于OP告诉OP需要Section
和flag
字符串之间的所有内容,因此以下内容可能有所帮助。
awk '/Age/ && flag{sub(/,/,"");print val1 $0;val1=flag="";next} /Section/{val1=$0;flag=1;next} flag{val1=val1 $0;}' Input_file
如果您希望在字符串section
和flag
之间拥有所有内容,我们必须确保每个组中都包含section
,否则就不会打印它。
答案 1 :(得分:1)
使用bash:
while IFS=" ," read -r x foo y; do
[[ $x == "Section" ]] && s="$y"
[[ $x == "Name" ]] && n="$y"
[[ $x == "Age" ]] && a="$y" && echo "Section : $s,Name : $n,Age : $a"
done < file
输出:
Section : A1234,Name : ABCBDEDF,Age : No Section : A1234,Name : Reporting,Age : No Section : XYSZA,Name : Work,Age : YES
答案 2 :(得分:1)
根据我认为最有可能的输入格式,一个部分可以跟随多个名称/年龄对。
如果是这种情况,那么您只需要存储最后看到的部分,然后输出名称和年龄。
我们可以存储最近看到的部分和名称,并将其与每个年龄一起使用。这也允许你跳过输入文件中的名字,但如果它们在那里,它就不会有效。
这意味着这应该可以解决问题:
val list: List[() => String] = List(foo1) //foo1 type mismatch.
val list: List[ => String] = List(foo1) //Invalid syntax.
以下成绩单显示了它的实际效果:
awk '/^Section/{sec=$0}/^Name/{nm=$0}/^Age/{print sec""nm""$0}'
根据您的要求输出:
printf 'Section : A1234,\nName : ABCBDEDF,\nAge : No,\nName : Reporting,\nAge : No\nSection : XYSZA,\nName : Work,\nAge : YES\n' | awk '/^Section/{sec=$0}/^Name/{nm=$0}/^Age/{print sec""nm""$0}'
请注意,第一行末尾有一个逗号,这是由输入数据中的一行引起的。如果你想要它被剥离,那将为代码添加另一个小的复杂性。现在,我只是假设您的输入数据不正确或者您希望它按原样回显。
答案 3 :(得分:1)
我已经尝试了修改后的输入。检查以下是否有效
awk '/^Section/{s=$0}
/^Name/ && match(p,/^Age/){$0=sprintf("%s%s%s",s,ORS,$0)}
{print;p=$0}' file_name | sed ':a;/Age/!{N;s/\n//g;ba}'
<强>输出(Вывод)强>
Section : A1234,Name : ABCBDEDF,Medium : English ,Age : No,
Section : A1234,Name : Reporting,Age : No
Section : XYSZA,Name : Work,Age : YES
注意(Заметка):awk
部分在此处执行预处理,在缺失的地方添加Section
,sed
打印所需的输出格式。