在 awk print 语句中重复输入有什么问题?
What's wrong with repeating entries in awk print statements?
我试图回答 this other question 关于如何重复现有专栏的问题。
我认为这很简单,只需执行以下操作即可:
awk '{print [=10=] }'
然而,这似乎只打印 [=13=]
。
所以,我决定再做一些测试:
awk '{print [=11=] [=11=]}' // prints the entire line only once
awk '{print }' // prints the first entry only once
awk '{print [=11=]}' // prints the first entry, followed
// by the entire line
// (the second part is not printed)
...
看看结果,我的印象是 awk
或多或少在检查他已经打印的内容并拒绝下次打印。
这是为什么?
我正在为 Linux (WSL) 使用 Windows 子系统中的 awk
,更准确地说是来自 Canonical 的 Ubuntu 应用程序。这是 awk --version
:
的结果
GNU Awk 5.0.1, API: 2.0 (GNU MPFR 4.0.2, GNU MP 6.2.0)
Copyright (C) 1989, 1991-2019 Free Software Foundation.
awk '{print [=10=] [=10=]}' // prints the entire line only once
awk '{print [=10=] }' // prints only [=10=]
所有这些都是由于您的文件中存在 DOS 换行符 \r
。由于 \r
unix 输出从行位置的开头覆盖在同一行上,因此两行重叠,您只能在输出中看到一行。
您可以使用 tr
或 sed
删除 \r
,如下所示:
tr -d '\t' < file > file.new
sed -i.bak $'s/\r$//' file
或者您可以要求 awk
将 \r\n
视为记录分隔符(注意 gnu-awk)
awk -v RS='\r\n` '{print [=12=], [=12=]}' file
我试图回答 this other question 关于如何重复现有专栏的问题。
我认为这很简单,只需执行以下操作即可:
awk '{print [=10=] }'
然而,这似乎只打印 [=13=]
。
所以,我决定再做一些测试:
awk '{print [=11=] [=11=]}' // prints the entire line only once
awk '{print }' // prints the first entry only once
awk '{print [=11=]}' // prints the first entry, followed
// by the entire line
// (the second part is not printed)
...
看看结果,我的印象是 awk
或多或少在检查他已经打印的内容并拒绝下次打印。
这是为什么?
我正在为 Linux (WSL) 使用 Windows 子系统中的 awk
,更准确地说是来自 Canonical 的 Ubuntu 应用程序。这是 awk --version
:
GNU Awk 5.0.1, API: 2.0 (GNU MPFR 4.0.2, GNU MP 6.2.0)
Copyright (C) 1989, 1991-2019 Free Software Foundation.
awk '{print [=10=] [=10=]}' // prints the entire line only once
awk '{print [=10=] }' // prints only [=10=]
所有这些都是由于您的文件中存在 DOS 换行符 \r
。由于 \r
unix 输出从行位置的开头覆盖在同一行上,因此两行重叠,您只能在输出中看到一行。
您可以使用 tr
或 sed
删除 \r
,如下所示:
tr -d '\t' < file > file.new
sed -i.bak $'s/\r$//' file
或者您可以要求 awk
将 \r\n
视为记录分隔符(注意 gnu-awk)
awk -v RS='\r\n` '{print [=12=], [=12=]}' file