将输出放入表中

将输出放入表中

我知道这是一个常见问题解答,但我已经阅读了有关此问题的多页内容,但无法使其正常工作。我使用该grep命令从三个不同的文本文件中查找一系列值。

命令行:

grep -o "201[1-4].[0-9][ -9]" file1.txt file2.txt file3.txt

输出:

file1.txt:2012.69
file1.txt:2013.44
file2.txt:2013.17
file2.txt:2012.6    
file2.txt:2013.75
file2.txt:2013.08
file3.txt:2013.54
file3.txt:2013.9    

我希望输出将三个文件的名称作为第一行(标题),然后在每列中找到所有值。我认为问题是我无法预测我需要多少行。

答案1

您可以使用awk将每个文件的输出连接grep到一行,然后使用csvtool和进行转置column -nt以使输出更好(注意,这-n是一个 Debian 扩展,可能不适用于您的平台)。

grep -o "201[1-4].[0-9][ -9]" file1.txt file2.txt file3.txt \
| awk -F: '
  {
    if (!s[$1]){ s[$1]=$2 }
    else { s[$1]=s[$1]","$2 }
  }
  END {
    for (f in s){ print f","s[f] }
  }' \
| csvtool transpose -u " " - \
| column -nt

输出:

file1.txt  file3.txt  file2.txt
2012.69    2013.54    2013.17
2013.44    2013.9     2012.6
                      2013.75
                      2013.08

您可能需要安装csvtool.

相关内容