我有一个文件,其中包含另一个表单命令的输出:
aaaaaaaa (paramA 12.4) param2: 14, some text 25.55
bbbbbb (paramA 5.1) param2: 121, some text2 312.1
我想从第一行中选择值aaaaaaaa, 12.4, 14, 25.55
,从第2行中选择bbbbbb, 5.1, 121, 312.1
,依此类推,并以不同的格式(可能是csv)转储它们。
我想在某些命令(sed,awk,grep等)中使用正则表达式,并将匹配的模式指定为$1
,$2
等,以便我可以将它们转储为所需的格式。
我不清楚的是要为此学习哪个命令。在搜索时,sed,awk,grep似乎能够做到这一点,但我无法得到现成的答案。我计划学习这些命令,但是我从什么开始解决手头的问题呢?
答案 0 :(得分:1)
对于完全相同的输入,您可以使用
apply()
产生
awk -F' +|)|,' -vOFS=", " '{print $1, $3, $6,$10}' file
但是,如果您在最后一个字段中有多于或少于两个单词,或者如果您在其他字段中有多个单词,则会失败。
否则,您必须查找数字并将其与文本区分开来,或者您需要更好地表征您的输入(固定,制表符分隔或基于某些正则表达式与sed)。
答案 1 :(得分:0)
您可以在bash
:
# Not tested; regex may not be entirely correct.
regex='(.*) +\(paramA (.*)\) +params: (.*), +.* +(.*)'
while IFS= read -r line; do
[[ $line =~ $regex ]] || continue
# Captured groups are:
# ${BASH_REMATCH[1]} - aaaaaaaa
# ${BASH_REMATCH[2]} - 12.4
# ${BASH_REMATCH[3]} - 14
# ${BASH_REMATCH[4]} - 25.55
done < file.txt
然而,它会相对缓慢。使用像awk
这样的其他工具可能会更有效率。但是,这完全取决于您实际想要对提取的文本执行的操作。