2

我会尽快说明这一点。输入的 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 命令接收文件并很好地打印原始文件,保存要附加的文件名。

命令:

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

输出:

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

问题是当我尝试将捕获的字符串附加到行尾时

命令:

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

输出:

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

似乎捕获的文本 ($7) 正在覆盖原始字符串。

任何帮助表示赞赏。

4

2 回答 2

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
于 2013-05-22T04:37:48.743 回答
0

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

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

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

print "",$NF 是将原始文本和新文件名分开。

于 2013-05-22T05:26:41.270 回答