使用awk在文件末尾添加常量值作为列
Adding constant value as column at the end of file using awk
我想在 bash 文件的每一行末尾添加一个具有常量值的列,同时选择列、进行数学运算并更改字段分隔符(根据我的想法只是制表符)到 space.
我的输入文件:
10:100968448:T:AA 0.3519 10 100968448 t aa 1.0024 0.01 0.812
10:101574552:A:ATG 0.4493 10 101574552 a atg 0.98906 0.0097 0.2585
10:102244152:A:AG 0.2008 10 102244152 a ag 0.996705 0.0114 0.7701
10:102290698:A:AG 0.1899 10 102290698 a ag 0.993024 0.0114 0.5431
10:104999458:T:TG 0.3449 10 104999458 t tg 0.956763 0.0101 1.149e-05
如果我将常量放在倒数第二列:
awk -v OFS=" " 'BEGIN { FS = "\t" } ; {print , , , log()/log(10), '105318', }' input
有效:
10:100968448:T:AA t aa 0.00104106 105318 0.812
10:101574552:A:ATG a atg -0.00477736 105318 0.2585
10:102244152:A:AG a ag -0.00143336 105318 0.7701
10:102290698:A:AG a ag -0.00304026 105318 0.5431
10:104999458:T:TG t tg -0.0191956 105318 1.149e-05
但是当我尝试将常量放在文件末尾时,我需要它:
awk -v OFS=" " 'BEGIN { FS = "\t" } ; {print , , , log()/log(10), , '105318'}' input
它并没有真正起作用(它正在将常量添加到第一个字段):
10531868448:T:AA t aa 0.00104106 0.812
10531874552:A:ATG a atg -0.00477736 0.2585
10531844152:A:AG a ag -0.00143336 0.7701
10531890698:A:AG a ag -0.00304026 0.5431
10531899458:T:TG t tg -0.0191956 1.149e-05
我什至尝试在它工作的地方使用文件,打乱列,并将常量随机添加到某个地方...我在这个文件上使用了 dos2unix,认为其中可能有一些奇怪的字符,但问题仍然存在相同。当我使用逗号作为输出字段分隔符时,我看到在文件末尾生成了多个逗号(当我尝试将常量包含在最后一列时)。
澄清一下,所需的输出:
10:100968448:T:AA t aa 0.00104106 0.812 105318
10:101574552:A:ATG a atg -0.00477736 0.2585 105318
10:102244152:A:AG a ag -0.00143336 0.7701 105318
10:102290698:A:AG a ag -0.00304026 0.5431 105318
10:104999458:T:TG t tg -0.0191956 1.149e-05 105318
有什么想法吗?
您的输入文件有 dos 行结尾。使用 dos2unix
或类似工具删除回车符 return。
您看到的输出是 awk 中的 </code> 字段具有回车 return 字符,因此当您添加字段时,光标会在打印最后一个之前移动到行首场.</p>
<pre><code>10:100968448:T:AA t aa 0.00104106 105318 0.812<CR> 105318
CR打印时把光标位置移到行首,所以你看:
10531868448:T:AA t aa 0.00104106 105318 0.812
能否请您尝试以下。
awk '{print ,,,log()/log(10),$NF,105318}' Input_file
如果您根据 Kamil 的回答控制了 M 个字符,那么 运行 以下。
awk '{gsub(/\r/,"");print ,,,log()/log(10),$NF,105318}' Input_file
我想在 bash 文件的每一行末尾添加一个具有常量值的列,同时选择列、进行数学运算并更改字段分隔符(根据我的想法只是制表符)到 space.
我的输入文件:
10:100968448:T:AA 0.3519 10 100968448 t aa 1.0024 0.01 0.812
10:101574552:A:ATG 0.4493 10 101574552 a atg 0.98906 0.0097 0.2585
10:102244152:A:AG 0.2008 10 102244152 a ag 0.996705 0.0114 0.7701
10:102290698:A:AG 0.1899 10 102290698 a ag 0.993024 0.0114 0.5431
10:104999458:T:TG 0.3449 10 104999458 t tg 0.956763 0.0101 1.149e-05
如果我将常量放在倒数第二列:
awk -v OFS=" " 'BEGIN { FS = "\t" } ; {print , , , log()/log(10), '105318', }' input
有效:
10:100968448:T:AA t aa 0.00104106 105318 0.812
10:101574552:A:ATG a atg -0.00477736 105318 0.2585
10:102244152:A:AG a ag -0.00143336 105318 0.7701
10:102290698:A:AG a ag -0.00304026 105318 0.5431
10:104999458:T:TG t tg -0.0191956 105318 1.149e-05
但是当我尝试将常量放在文件末尾时,我需要它:
awk -v OFS=" " 'BEGIN { FS = "\t" } ; {print , , , log()/log(10), , '105318'}' input
它并没有真正起作用(它正在将常量添加到第一个字段):
10531868448:T:AA t aa 0.00104106 0.812
10531874552:A:ATG a atg -0.00477736 0.2585
10531844152:A:AG a ag -0.00143336 0.7701
10531890698:A:AG a ag -0.00304026 0.5431
10531899458:T:TG t tg -0.0191956 1.149e-05
我什至尝试在它工作的地方使用文件,打乱列,并将常量随机添加到某个地方...我在这个文件上使用了 dos2unix,认为其中可能有一些奇怪的字符,但问题仍然存在相同。当我使用逗号作为输出字段分隔符时,我看到在文件末尾生成了多个逗号(当我尝试将常量包含在最后一列时)。
澄清一下,所需的输出:
10:100968448:T:AA t aa 0.00104106 0.812 105318
10:101574552:A:ATG a atg -0.00477736 0.2585 105318
10:102244152:A:AG a ag -0.00143336 0.7701 105318
10:102290698:A:AG a ag -0.00304026 0.5431 105318
10:104999458:T:TG t tg -0.0191956 1.149e-05 105318
有什么想法吗?
您的输入文件有 dos 行结尾。使用 dos2unix
或类似工具删除回车符 return。
您看到的输出是 awk 中的 </code> 字段具有回车 return 字符,因此当您添加字段时,光标会在打印最后一个之前移动到行首场.</p>
<pre><code>10:100968448:T:AA t aa 0.00104106 105318 0.812<CR> 105318
CR打印时把光标位置移到行首,所以你看:
10531868448:T:AA t aa 0.00104106 105318 0.812
能否请您尝试以下。
awk '{print ,,,log()/log(10),$NF,105318}' Input_file
如果您根据 Kamil 的回答控制了 M 个字符,那么 运行 以下。
awk '{gsub(/\r/,"");print ,,,log()/log(10),$NF,105318}' Input_file