2014-02-18 37 views
0

我有許多文本文件,需要在每個文件上放一個標題,具體取決於每個文件上的數據。使用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 

所以我想我不能用貓把它們作爲一個頭,還是我做錯了什麼?

預先感謝

+0

漂亮相關:http://superuser.com/questions/246837/how-do-i-add-text-to-the-beginning-of-a-file-in-bash – fedorqui

+0

這可能是簡單的使用' perl'帶'-i'標誌! –

+0

試着用第四行替換:awk NR == 1 {first = $ 1} {sum + = $ 1;} END {last = $ 1; print NR,last,「L」;}'<「$ {i}」 '(whipe the'cat') –

回答

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 

,但目前還不清楚是什麼你真的很想做,因爲你從來沒有在E中使用firstsum並設置last ND部分是一個壞主意,因爲它不適用於所有的awk,並且有一個簡單的選擇。

如果您通過一些示例輸入和預期輸出更新您的問題,我們可以爲您提供幫助。

+0

有沒有辦法避免生成所有這些臨時文件? – JM88

+0

只有1個臨時文件生成。通過上面的腳本,您可以簡單地添加一個關閉(FILENAME),然後執行打印> FILENAME,但該腳本沒有意義,因此它不能成爲您真正在做的事情。不知道你在做什麼,很難給你一個很好的答案。較新版本的GNU awk有'-i inplace'選項,可能是你想要的,但可能有更好的選擇。 –

1

UPDATE:

awk

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

而不awk

cat & echo

cat <(echo "header") test.txt 

使用tac

(OR):

tac test.txt | echo "header" >> test.txt | tac test.txt 
相關問題