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

How to add a column at the end of .txt file in Linux?

我想在 .txt 文件末尾的每一行中添加一个仅包含“2”作为值的新列,并将新文件另存为输出。我将 R 中的 input.txt 文件保存为制表符分隔文件。我试过以下代码;

awk -v RS='\r\n' 'BEGIN {OFS = '\t'} {print [=13=], "2"}' input.txt > output.txt

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

我的input.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 文件的这一列中添加一个 header(例如,额外的)?

尝试

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

您似乎需要 sed:

$ 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 [=10=], (NR>1 ? 2 : "header")}' input.txt > output.txt

无论您的行以 \r\n 结尾还是仅以 \n.

结尾,以上内容都可以在每个 UNIX 系统上使用任何 shell 中的任何 awk