我会很快解决这个问题。输入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)正在覆盖原始字符串。
感谢任何帮助。
答案 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用于分隔原始文本和新文件名。