linux - 在线替换 bash(使用变量将行替换为新行)

标签 linux bash text sed awk

我正在浏览和读取文件中的行。他们有大量不必要的信息,我想重新格式化这些行以备后用,以便以后可以使用必要的信息。

文件 (file1) 中的示例行

Name: *name* Date: *date* Age: *age* Gender: *gender* Score: *score*

假设我只想从文件中提取性别和年龄并稍后使用

换行

*gender*, *age*

在 bash 中:

    while read line; do
       <store variable for gender>
       <store variable for age>
     <overwrite each line in CSV - gender,age>
     <use gender/age as inputs for later comparisons>  
     done < file1

编辑:条目中没有稳定性。可以使用 echo $line | 找到一个值cut 并使用 [ $line =~ "keyValue"] 找到另一个值,然后设置该值

我正在考虑这样存储两个变量的组合:

newLine="$val1,$val2"

然后使用 sed 内联替换将 $line 替换为 $newLine

还有更好的方法吗?这可能归结为变量的 sed 格式问题。

最佳答案

这将从您发布的样本输入中产生您想要的输出:

$ cat file
Name: *name* Date: *date* Age: *age* Gender: *gender* Score: *score*

$ awk -F'[: ]+' -v OFS=', ' '{for (i=1;i<NF;i+=2) a[$i]=$(i+1); print a["Gender"], a["Age"]}' file
*gender*, *age*

$ awk -F'[: ]+' -v OFS=', ' '{for (i=1;i<NF;i+=2) a[$i]=$(i+1); print a["Score"], a["Name"], a["Date"] }' file
*score*, *name*, *date*

您可以在上面看到以您喜欢的顺序打印您喜欢的任何字段是多么容易。

如果这不是您想要的,请发布一些更具代表性的意见。

关于linux - 在线替换 bash(使用变量将行替换为新行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18938126/

相关文章:

linux - 有没有办法克服 linux 系统上的端口限制?

linux - 对 Shell 脚本的一些疑问。

javascript - 如何从命令行与社交网站交互(自动 YouTube 发布、查找新视频的标题等)

linux - 在 bash 中重复特定的代码行

linux - 使用grep在一个很长的字符串中搜索一个词

java - 打开短信并在其中放置一个随机数组

linux - 检查是否存在与目录同名的文件

c++ - 如何在 Linux 上的 Flutter 插件中使用 CMake 正确链接 ffmpeg?

bash - 如何将 wc -l 输出通过管道传输到 echo 输出

ios - 带有表情符号编辑的 UITextView