使用awk将文本添加到行尾

时间:2013-05-21 15:33:25

标签: awk

我会很快解决这个问题。输入test.bat文件如下所示:

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 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您是否需要使用“tst”替换最后一条记录($ NF)中的文件扩展名并将其附加到原始文本中?

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

printf首先是因为如果你改变$ NF,$ 0也会被改变。

print“”,$ NF用于分隔原始文本和新文件名。