我有一个文本文件,格式如下:
{
Name: Me
Age:17
Qualification : Doctor
}
{
Name: You
Age:21
Qualification : Another Doctor
}
我需要将年龄行中的数字,“17”和“21”复制到此格式的另一个文件中:
17,21.
正如您所看到的,我正在尝试在文件1中的某个字段中创建数字的文件2 CSV。我需要使用shell脚本自动执行此操作。请建议解决这个问题。
当我在Google上搜索时,'sed'选项出现了,但我找不到解决此问题的紧凑解决方案。
提前感谢您的时间和贡献。
答案 0 :(得分:2)
有人这样吗?
awk -F: '/Age/ {printf "%s,",$2} END {print ""}' file1 >agefile
cat agefile
17,21,
答案 1 :(得分:2)
以下是Jotne对尾随逗号的回复的变体:
awk -F: '/Age:/{r=r $2 ","}END{sub(/,$/,"",r);print r}' a
17,21
基本上,它通过查找包含“Age”的行,然后在该行上追加第二个字段并在之后添加逗号,在变量“r”中构建结果字符串。最后,它用任何内容替换一个尾随逗号(在行尾),然后打印结果字符串“r”。
答案 2 :(得分:2)
这可能适合你(GNU sed):
sed '/\s*Age:\s*/H;$!d;x;s///;s//,/g' file
这会将带有Age:
的行附加到保留空间(HS)并删除其他所有内容。在文件结尾处,它会切换到HS并删除不需要的文本,将其替换为,
。
答案 3 :(得分:1)
@ECHO OFF
SETLOCAL
SET "number1="
(
FOR /f "tokens=1,2delims=: " %%a IN (q20072209.txt) DO IF "%%a"=="Age" (
IF DEFINED number1 (
CALL ECHO %%number1%%,%%b.
SET "number1="
) ELSE SET number1=%%b
)
)>newfile.txt
TYPE newfile.txt
GOTO :EOF
完全不确定如果有超过1对数据元素会发生什么。
q20072209.txt
是输入文本文件的名称,将生成newfile.txt
。