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

时间:2014-02-18 11:39:16

标签: bash shell awk cat

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

这个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把它们作为标题,或者我做错了什么?

提前致谢

2 个答案:

答案 0 :(得分:2)

<强>更新

awk

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

没有awk

cat&amp; echo

cat <(echo "header") test.txt

(OR)

使用tac

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

答案 1 :(得分:1)

我认为你尝试用你的循环做的是:

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是不好的,因此您不清楚自己真正想要做什么这个想法因为它不适用于所有问题,而且还有一个简单的选择。

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