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