使用awk将文本添加到行尾

使用awk将文本添加到行尾,awk,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("\

我会很快把这件事说清楚。输入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**
**AIRtrac_data_frame405.txtrint $0;}' AIRtrac_data_frame405.txt**
问题是当我试图将捕获的字符串附加到行的末尾时

命令:

输出:

**awk '{temp = $7} {printf("%s\n", $0)}' mactounix_convert_line_return.bat**
**AIRtrac_data_frame405.txtrint $0;}' AIRtrac_data_frame405.txt**
捕获的文本($7)似乎正在覆盖原始字符串


非常感谢您的帮助。

不确定我是否正确理解您的要求,但根据您的输入和输出,您可以尝试以下方法-

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

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

awk '{printf $0; gsub(/[^\.]+$/, "tst"); print "",$NF;}' data.txt
printf优先,因为如果更改$NF,$0也将更改


打印“%$NF”用于分隔原始文本和新文件名。

Mac因为OSX(即10.0)使用了
\n
,所以除非您要转换12年以上的文件,否则您可能不需要这个。您是否检查了文件是否确实有
\r
s?(而不是windows
\r\n
,在这种情况下,您应该使用
dos2unix
)文件是由使用某些.net API的自定义windows程序保存的,因此这个问题是非常真实的。我不能告诉你Windows工具集,但它最坏也只有3年的历史了。回到手头的问题。然后是windows的问题所在,所以像我说的那样使用
dos2unix
(或者
tr-d'\r'
Kevin,我试图添加tr-d'\r'但没有用。我只是想澄清一下,当我说只有一个\r时,我指的是一个0x0D。是的,你正是我想做的。原始的.txt文件(全部400+)在eol上有/r(或0xD)。我用Windows eol错误地创建了.bat文件(以纠正原始问题),Kevin帮助我修复了该文件。我现在可以正确地awk一个“修复的”(.tst)文件,因此我将能够将400多个文件中的单个字段$7连接到一个文件中。感谢所有的帮助。是的,我这样做了。我试图不要求太多,因为最初的问题真的很严重,我想一旦问题解决,我会想出如何交换扩展名。谢谢。