awk/gawk 似乎覆盖了结果中的列
awk/gawk seems to overwrite columns on result
[琐碎]
[已解决]
tl:dr - DOW CRLF 让人感觉好像 awk 行为不端;小错误!
我不确定为什么 awk/gawk 会这样。有什么提示吗?见过 awk 结果覆盖终端上的列吗?我只在一台机器上看到了这个;在其他任何地方,这些东西都很好用!不确定这是终端行为不当还是其他任何事情。 stty sane
似乎也无济于事。有人见过类似的东西吗?
$ cat in.txt
2132088 AAA_WEB_50181_552222195-1
2110665 AAA_WEB_50177_547796499-2
2157591 AAA_WEB_50181_551310844-1
2117370 AAA_WEB_50178_549250104-1
2109777 AAA_WEB_50180_551512637-1
2112704 AAA_WEB_50179_410838823-13
2116984 AAA_WEB_50178_549463801-2
2119511 AAA_WEB_50179_550076677-2
2122008 AAA_WEB_50180_551679428-1
2124984 AAA_WEB_50177_548026293-1
$ awk '{print " " }' in.txt
213208850181_552222195-1
211066550177_547796499-2
215759150181_551310844-1
211737050178_549250104-1
210977750180_551512637-1
211270450179_410838823-13
211698450178_549463801-2
211951150179_550076677-2
212200850180_551679428-1
212498450177_548026293-1
$ cat /etc/issue.net
Ubuntu 14.04.4 LTS
$ gawk '{print " " }' in.txt
213208850181_552222195-1
211066550177_547796499-2
215759150181_551310844-1
211737050178_549250104-1
210977750180_551512637-1
211270450179_410838823-13
211698450178_549463801-2
211951150179_550076677-2
212200850180_551679428-1
212498450177_548026293-1
$ gawk -W version
GNU Awk 4.0.1
Copyright (C) 1989, 1991-2012 Free Software Foundation.
截图:
如果文件来自类似 dos 的环境,问题可能出在行末尾的回车 return (\r
)。
唯一的解决方案是 gawk
。
gawk '{printf "%s %s\n",gensub(/\r$/,"",-1,),}' in.txt
正如 tripleee 所指出的,问题可能是由于 DOS 行终止符引起的,一个简单的解决方法是使用 tr
去除特殊字符并将其提供给 awk
待处理。
< in.txt tr -dc '[:print:]\n' | gawk '{print " " }'
在上面的示例中,tr -dc '[:print:]\n'
在将输入文件提供给 awk
之前只允许输入文件中的可打印字符。
[琐碎] [已解决]
tl:dr - DOW CRLF 让人感觉好像 awk 行为不端;小错误!
我不确定为什么 awk/gawk 会这样。有什么提示吗?见过 awk 结果覆盖终端上的列吗?我只在一台机器上看到了这个;在其他任何地方,这些东西都很好用!不确定这是终端行为不当还是其他任何事情。 stty sane
似乎也无济于事。有人见过类似的东西吗?
$ cat in.txt
2132088 AAA_WEB_50181_552222195-1
2110665 AAA_WEB_50177_547796499-2
2157591 AAA_WEB_50181_551310844-1
2117370 AAA_WEB_50178_549250104-1
2109777 AAA_WEB_50180_551512637-1
2112704 AAA_WEB_50179_410838823-13
2116984 AAA_WEB_50178_549463801-2
2119511 AAA_WEB_50179_550076677-2
2122008 AAA_WEB_50180_551679428-1
2124984 AAA_WEB_50177_548026293-1
$ awk '{print " " }' in.txt
213208850181_552222195-1
211066550177_547796499-2
215759150181_551310844-1
211737050178_549250104-1
210977750180_551512637-1
211270450179_410838823-13
211698450178_549463801-2
211951150179_550076677-2
212200850180_551679428-1
212498450177_548026293-1
$ cat /etc/issue.net
Ubuntu 14.04.4 LTS
$ gawk '{print " " }' in.txt
213208850181_552222195-1
211066550177_547796499-2
215759150181_551310844-1
211737050178_549250104-1
210977750180_551512637-1
211270450179_410838823-13
211698450178_549463801-2
211951150179_550076677-2
212200850180_551679428-1
212498450177_548026293-1
$ gawk -W version
GNU Awk 4.0.1
Copyright (C) 1989, 1991-2012 Free Software Foundation.
截图:
如果文件来自类似 dos 的环境,问题可能出在行末尾的回车 return (\r
)。
唯一的解决方案是 gawk
。
gawk '{printf "%s %s\n",gensub(/\r$/,"",-1,),}' in.txt
正如 tripleee 所指出的,问题可能是由于 DOS 行终止符引起的,一个简单的解决方法是使用 tr
去除特殊字符并将其提供给 awk
待处理。
< in.txt tr -dc '[:print:]\n' | gawk '{print " " }'
在上面的示例中,tr -dc '[:print:]\n'
在将输入文件提供给 awk
之前只允许输入文件中的可打印字符。