使用命令行将某些单词从一个文件复制到另一个文件

时间:2013-11-19 12:59:00

标签: linux command-line sed

我有一个文本文件,格式如下:

{
Name: Me
Age:17
Qualification : Doctor
}
{
 Name: You
 Age:21
 Qualification : Another Doctor
}

我需要将年龄行中的数字,“17”和“21”复制到此格式的另一个文件中:

17,21.

正如您所看到的,我正在尝试在文件1中的某个字段中创建数字的文件2 CSV。我需要使用shell脚本自动执行此操作。请建议解决这个问题。

当我在Google上搜索时,'sed'选项出现了,但我找不到解决此问题的紧凑解决方案。

提前感谢您的时间和贡献。

4 个答案:

答案 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