使用 awk 将标题放入文本文件中



我有很多文本文件,需要根据每个文件的数据在每个文件上放置一个标题。

此 awk 命令完成任务:

awk 'NR==1{first=$1}{sum+=$1;}END{last=$1;print NR,last,"L";}' my_text.file

但是这会将其打印在屏幕上,我想将此输出放在每个文件的标题中,并使用相同的文件名保存修改。

这是我尝试过的:

for i in *.txt
do
echo Processing ${i}
cat awk 'NR==1{first=$1}{sum+=$1;}END{last=$1;print NR,last,"L";}' "${i}" ${i} > $$.tmp && mv $$.tmp "${i}"
done

所以我想我不能使用 cat 将它们作为标题,还是我做错了什么?

提前致谢

更新:

awk

awk 'BEGIN{print "header"}1' test.txt

没有awk

catecho

cat <(echo "header") test.txt

(或)

使用tac

tac test.txt | echo "header" >> test.txt | tac test.txt

我认为您要对循环执行的操作是:

for i in *.txt
do
    echo "Processing $i"
    awk 'NR==1{first=$1}{sum+=$1}END{last=$1;print NR,last,"L"}' "$i" > $$.tmp &&
    cat "$i" >> $$.tmp &&
    mv $$.tmp "$i"
done

但目前尚不清楚您真正想做什么,因为您从不使用firstsum并且在 END 部分中设置last是一个坏主意,因为它不适用于所有 awk,并且有一个简单的替代方案。

如果您使用一些示例输入和预期输出更新您的问题,我们可以为您提供帮助。

相关内容

  • 没有找到相关文章

最新更新