Bash:将多个文件中的行追加到一个输出文件并将文件名添加为列

Bash:将多个文件中的行追加到一个输出文件并将文件名添加为列

这是我之前问题的延续 Bash:选择多个文件中指定列中具有最高值的行,并创建一个输出文件,其中包含包含最大值的行

我使用的解决方案是:

for file in mi*
do
    sort -k14,14 -n $file | tail -1
done > result

我想知道是否有一种简单的方法来编辑此代码,以便在创建输出文件时我可以添加包含文件名的列,或者是否需要使用不同的方法。

我发现这个问题Bash 命令从多个文件获取数据并附加文件名但我不知道如何适应我的需要

更新更多信息:文件是 tsv 并具有列名称

答案1

for file in mi*
do
    printf "%s " $file
    sort -k14,14 -n $file | tail -1
done > result

或者

for file in mi*
do
    echo "$file $(sort -k14,14 -n $file | tail -1)"
done > result

根据分隔符,您可以将文件名后面的空格替换为不同的字符。

答案2

技巧是将发送到 stdout 的内容放入变量中,然后输出该变量和文件名。

您可以更改回显中变量的顺序,还可以添加分隔符(如果它很重要)。

例如。

for file in mi*
do
    myline=$(sort -k14,14 -n $file | tail -1)
    echo "$file $myline"
done > result

您找到的答案使用名为搜索的命令grep;如果搜索多个文件,grep 可以选择在找到搜索字符串的文件名前面添加。

相关内容