2013-05-21 19 views
2

我會盡快將其解決。 test.bat的文件輸入的樣子:使用awk將文本添加到行尾

awk '{ gsub("\r", "\n"); print $0;}' AIRtrac_data_frame001.txt 

awk '{ gsub("\r", "\n"); print $0;}' AIRtrac_data_frame002.txt 

... 

awk '{ gsub("\r", "\n"); print $0;}' AIRtrac_data_frame405.txt 

我想到底是:

awk '{ gsub("\r", "\n"); print $0;}' AIRtrac_data_frame001.txt AIRtrac_data_frame001.tst 

awk '{ gsub("\r", "\n"); print $0;}' AIRtrac_data_frame002.txt AIRtrac_data_frame001.tst 

... 

awk '{ gsub("\r", "\n"); print $0;}' AIRtrac_data_frame405.txt AIRtrac_data_frame001.tst 

此awk命令需要在文件和打印精美的原始,保存的文件名是追加。

CMD:

awk '{temp = $7} {printf("%s\n", $0)}' mactounix_convert_line_return.bat 

輸出:

**awk '{temp = $7} {printf("%s\n", $0)}' mactounix_convert_line_return.bat** 

的問題是,當我嘗試捕獲的字符串附加到該行的末尾

CMD:

awk '{temp = $7} {printf "%s %s\n", $0, temp}' mactounix_convert_line_return.bat 

輸出:

**AIRtrac_data_frame405.txtrint $0;}' AIRtrac_data_frame405.txt** 

看來捕獲的文本($ 7)正在覆蓋原始字符串。

任何幫助表示讚賞。

+2

因爲OSX(即10.0)已經使用了'\ n',所以除非你轉換12年前的文件,否則你可能不需要這個。你檢查過這些文件是否真的有'\ r's? – Kevin

+0

(而不是窗口'\ r \ n',在這種情況下你應該使用'dos2unix') – Kevin

+0

這些文件被一個自定義的windows程序使用一些.net API保存,所以這個問題是相當真實的。我不能告訴你Windows工具集,但最壞的情況是3歲。所以回到手頭的問題。 – siamese3

回答

0

不知道如果我理解您的要求正確,但根據您的輸入和輸出,你可以嘗試這樣的事情 -

awk '{ a=$0; sub (/txt$/,"tst",$NF); print a,$NF}' file 

[jaypal:~/Temp] cat file 
awk '{ gsub("\r", "\n"); print $0;}' AIRtrac_data_frame001.txt 
awk '{ gsub("\r", "\n"); print $0;}' AIRtrac_data_frame002.txt 
awk '{ gsub("\r", "\n"); print $0;}' AIRtrac_data_frame405.txt 

[jaypal:~/Temp] awk '{ a=$0; sub (/txt$/,"tst",$NF); print a,$NF}' file 
awk '{ gsub("\r", "\n"); print $0;}' AIRtrac_data_frame001.txt AIRtrac_data_frame001.tst 
awk '{ gsub("\r", "\n"); print $0;}' AIRtrac_data_frame002.txt AIRtrac_data_frame002.tst 
awk '{ gsub("\r", "\n"); print $0;}' AIRtrac_data_frame405.txt AIRtrac_data_frame405.tst 

如果您打算將輸出重定向到新的tst文件,那麼你就需要一個>(重新定向)操作員。你可以在你的打印語句之間添加它。

awk '{ a=$0; sub (/txt$/,"tst",$NF); print a" > "$NF}' file 
+0

是的,你正是我想要做的。原始.txt文件(所有400+)在eol有/ r(或0xD)。錯誤地使用Windows eol \ r \ n來修改.bat文件(糾正原始問題),Kevin幫我修復了這個問題。現在我可以正確地修復一個「固定」(。tst)文件,這樣我就可以將所有400多個文件中的單個字段$ 7連接成一個文件。感謝所有的幫助。 – siamese3

0

是否需要用「tst」替換最後一個記錄($ NF)中的文件擴展名並將其附加到原始文本?

awk '{printf $0; gsub(/[^\.]+$/, "tst"); print "",$NF;}' data.txt 

printf第一,因爲如果你改變$ NF,$ 0也將被改變。

print「」,$ NF是分隔原文和新文件名。

+0

是的,我願意。我試圖不要問太多,因爲原來的問題真的很嚴重,我想一旦解決了問題,我會弄清楚如何更換擴展。謝謝。 – siamese3