以下是我要提取的初始输入数据:

david ex1=10 ex2=12 quiz1=5 quiz2=9 exam=99
judith ex1=8 ex2=16 quiz1=4 quiz2=10 exam=90
sam ex1=8 quiz1=5 quiz2=11 exam=85
song ex1=8 ex2=20 quiz2=11 exam=87

如何以这种方式提取要格式化的每个单词:
david
ex1=10
ex2=12
etc...

因为我最终想要这样的输出:
david 12 99
judith 16 90
sam 0 85
song 20 87

当我使用以下命令运行程序时:
./marks ex2 exam < file

最佳答案

假设输入文件名为input.txt,只需使用tr命令行工具用新行字符替换空格字符:

tr ' ' '\n' < input.txt

对于您的第二个请求,您可能需要在每行提取特定字段,因此cutawk命令可能很有用(注意,我的示例确实是可以改进的):
while read p; do
  echo -n "$(echo $p | cut -d ' ' -f1) "                  # name
  echo -n "$(echo $p | cut -d ' ' -f3 | cut -d '=' -f2) " # ex2 val
  echo -n $(echo $p | awk -F"exam=" '{ print  $2 }')      # exam val
  echo
done < input.txt

10-06 14:31