在Linux中如何在.txt文件末尾添加列?

在Linux中如何在.txt文件末尾添加列?,linux,awk,add,Linux,Awk,Add,我想在a.txt文件末尾的每行中添加一个新列,该列只包含“2”作为值,并将新文件另存为输出。我将R中的input.txt文件保存为选项卡分隔的文件。我尝试了以下代码 awk-v RS='\r\n''BEGIN{OFS='\t}{print$0,“2”}input.txt>output.txt 但它会将2作为附加值添加到最后一列,并在output.txt文件的每个数据行后添加一个空行 我的输入.txt SAMPLE rs1 rs2 rs3 rs4 rs5

我想在a.txt文件末尾的每行中添加一个新列,该列只包含“2”作为值,并将新文件另存为输出。我将R中的input.txt文件保存为选项卡分隔的文件。我尝试了以下代码

awk-v RS='\r\n''BEGIN{OFS='\t}{print$0,“2”}input.txt>output.txt

但它会将2作为附加值添加到最后一列,并在output.txt文件的每个数据行后添加一个空行

我的输入.txt

SAMPLE  rs1     rs2     rs3     rs4     rs5     rs6     rs7     rs8     rs9     rs10    rs11
6       0       0       0       0       0       0       0       0       0       0       0
7       0       0       0       0       0       0       0       0       0       0       0
10                                                      1                       1       
14      0       0       0       0       0       0       0       0       0       0       0
19      0       0       0       0       0       0       0       0       0       0       0
34      0       0       0       0       0       0       0       0       0       0       0
40                                                              1               1       1
41      0       0       0       0       0       0       0       0       0       0       0
46                                                                              1       
58                                                                              1       
67      0       0       0       0       0       0               0       0       0       0
69                                                                              1       
71      0       0       0       0       0       0       0       0       0       0       0
76      0       0       0       0       0       0       0       0       0       0       0
78      0       0       0       0       0       0       0       0       0       0       0
80                                                                              1       
83      0       0       0       0       0       0               0       0       0       0
84                                                                              1       
86                                                                              1       
90                                                                              1       
92      0       0       0       0       0       0               0       0       0       0
94      0       0       0       0       0       0               0       0       0       0
95      0       0       0       0       0       0               0       0       0       0
我使用上述代码得到的output.txt

SAMPLE  rs1     rs2     rs3     rs4     rs5     rs6     rs7     rs8     rs9     rs10    rs112

6       0       0       0       0       0       0       0       0       0       0       02

7       0       0       0       0       0       0       0       0       0       0       02

10                                                      1                       1       2

14      0       0       0       0       0       0       0       0       0       0       02

19      0       0       0       0       0       0       0       0       0       0       02

34      0       0       0       0       0       0       0       0       0       0       02

40                                                              1               1       12

41      0       0       0       0       0       0       0       0       0       0       02

46                                                                              1       2

58                                                                              1       2

67      0       0       0       0       0       0               0       0       0       02

69                                                                              1       2

71      0       0       0       0       0       0       0       0       0       0       02

76      0       0       0       0       0       0       0       0       0       0       02

78      0       0       0       0       0       0       0       0       0       0       02

80                                                                              1       2

83      0       0       0       0       0       0               0       0       0       02

84                                                                              1       2

86                                                                              1       2

90                                                                              1       2

92      0       0       0       0       0       0               0       0       0       02

94      0       0       0       0       0       0               0       0       0       02

95      0       0       0       0       0       0               0       0       0       02
如何在末尾添加一列2?另外,是否有办法在output.txt文件中向该列添加标题(例如,额外标题)?

试试看

$ awk -v RS='\r\n' 'BEGIN{FS=OFS="\t"} {print $0, (NR==1?"header":2)}' input.txt > output.txt 

似乎你想要塞德:

$ t=$(printf '\t')
$ sed -e '1s/$/'"${t}header/" -e '1!s/$/'"${t}2/" input > output

我猜您没有使用GNU awk,因此
RS='\r\n'
被视为只是
RS='\r'
从而将换行符作为下一条记录的一部分。还有
“BEGIN{OFS='\t'}…”会将
OFS
设置为空字符串,因为它会尝试使用名为
t
的未初始化awk变量的内容-计算
'
s以查看
\t
是否在awk程序之外

试试这个:

awk 'BEGIN{OFS="\t"} {sub(/\r$/,""); print $0, (NR>1 ? 2 : "header")}' input.txt > output.txt

上述操作将在每个UNIX系统的任何shell中使用任何awk,无论您的行是以
\r\n
结尾还是仅以
\n

结尾。代码会在右侧添加列和标题,但仍会在文件中的每个数据行后添加额外的空行。我如何去掉这些空白行?你应该提到这需要GNU awk。对于其他AWK,它将只使用
\r
作为RS,并打印随后的
\n
作为下一条记录的开始。它工作正常,但将^M添加到“rs11”列
样本rs1 rs2 rs3 rs4 rs5 rs6 rs7 rs8 rs9 rs10 rs11^M头6 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 ^m2
如何从output.txt文件的第二个最后一列(rs11)中删除^M?IMO,在执行任何操作之前,应将输入文件转换为unix行结尾。