【问题标题】:awk merging 2 columns and adding an extra column to txt file [duplicate]awk合并2列并向txt文件添加额外的列[重复]
【发布时间】:2019-08-27 00:56:48
【问题描述】:

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

我的原始文件是

1002       10214
1002       10220
1002       10222
1002       10248
1002       10256

我需要创建一个新文件,将上面的 2 列合并,并添加值为 1 的第二列

想要的输出应该是这样的

100210214    1
100210220    1
100210222    1
100210248    1
100210256    1

我尝试了以下 awk 命令,首先将 2 列打印为 1 到 tmp 文件中,然后添加带有“1”的额外列

cat input.txt |  awk '{ print ($1$2)}' > tmp1.txt

cat tmp1.txt | awk ' {print $0, (1) }' > output.txt

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

tmp1.txt(确定)

100210214    
100210220    
100210222    
100210248    
100210256   

output.txt(不正常)

 10210214
 10210220
 10210222
 10210248
 10210256

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

【问题讨论】:

  • awk '{$1=$1$2;$2=1}1' file.txt

标签: awk columnsorting


【解决方案1】:

请您尝试关注一下。

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

【讨论】:

  • 除非我先做 dos2unix 文件否则不起作用
  • 嗯? gsubdos2unix 做同样的事情。
  • @tripleee,对不起,如果我在这里错了,我认为它会从行中删除所有 \r 字符。
  • 嗯,是的,如果你能找到一个文件,其中除了行尾以外的其他地方有 CR 字符,这将与dos2unix略有不同。
  • @tripleee,好的,先生,我现在已将命令更改为sub(/\r$/,"")
【解决方案2】:

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

dos2unix file

然后用这个得到想要的输出:

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

【讨论】:

  • 它有效,谢谢! Windows 行尾绝对是问题
猜你喜欢
  • 2014-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-01
  • 1970-01-01
  • 2020-09-18
  • 2018-02-06
相关资源
最近更新 更多