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