我知道这是一个常见问题解答,但我已经阅读了有关此问题的多页内容,但无法使其正常工作。我使用该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
.