awk合并2列并向txt文件中添加额外列

awk合并2列并向txt文件中添加额外列,awk,columnsorting,Awk,Columnsorting,我过去这样做没有问题,但这次不行,我不明白为什么 我的原始文件是 1002 10214 1002 10220 1002 10222 1002 10248 1002 10256 我需要创建一个新文件,合并上面的两列,并添加第二列,值为1 期望的输出应该如下所示 100210214 1 100210220 1 100210222 1 100210248 1 100210256 1 我尝试了下面的awk命令,

我过去这样做没有问题,但这次不行,我不明白为什么

我的原始文件是

1002       10214
1002       10220
1002       10222
1002       10248
1002       10256
我需要创建一个新文件,合并上面的两列,并添加第二列,值为1

期望的输出应该如下所示

100210214    1
100210220    1
100210222    1
100210248    1
100210256    1
我尝试了下面的awk命令,首先将2列打印到一个tmp文件中的1中,然后用“1”添加额外的列

虽然第一个命令似乎可以正常工作,但第二个命令却不能

tmp1.txt(正常)

output.txt(不正常)


“1”出现在第一列的前面,不知道为什么,甚至替换了前2个字符。是否因为原始输入文件不同(可能是使用了“空格”而不是制表符)?

当输入文件有Windows行结尾(即
\r\n
)时,会发生这种情况。您可以使用以下命令修复它:

dos2unix file
然后用这个函数得到所需的输出:

awk '{$1=$1$2;$2=1}1' file

你能试试下面的吗

awk 'BEGIN{OFS="\t"} {sub(/\r$/,"");print $1 $2,"1"}'  Input_file

awk'{$1=$1$2;$2=1}1'file.txt
它能工作,谢谢!Windows行结尾绝对是个问题,除非我先做dos2unix文件,否则不行?
gsub
dos2unix
@tripleee的作用相同,如果我在这里出错,我想它会从行中删除所有
\r
字符。是的,如果您能找到一个文件,其中除行末尾之外的其他地方有CR字符,这将做一些与
dos2unix
@tripleee稍有不同的事情,当然,先生,我现在已经将命令更改为
sub(/\r$/,“”)
dos2unix file
awk '{$1=$1$2;$2=1}1' file
awk 'BEGIN{OFS="\t"} {sub(/\r$/,"");print $1 $2,"1"}'  Input_file