1

我正在尝试向文件添加一列:

1       12098   12258   0.00
1       12553   12721   1.37
1       13331   13701   34.69
1       30334   30503   0.00
1       35045   35544   0.00
1       35618   35778   0.00
1       69077   70017   0.24
1       324294  324394  0.68
1       324427  325605  3.18

所以它看起来像这样:

1       12098   12258   unknown   0.00
1       12553   12721   unknown   1.37
1       13331   13701   unknown   34.69
1       30334   30503   unknown   0.00
1       35045   35544   unknown   0.00
1       35618   35778   unknown   0.00
1       69077   70017   unknown   0.24
1       324294  324394  unknown   0.68
1       324427  325605  unknown   3.18

我已经设法使用这个命令来做到这一点:

awk '$3 = $3 FS "unknown"' <file> > <new_file>

但是,我有 900 多个文件也需要执行此操作,并且每次都输出到一个新文件。我发现 awk 理解起来很复杂,想知道是否有办法使用#SBATCH 脚本或任何其他方法一次处理多个文件?

我对堆栈溢出很陌生,所以任何帮助将不胜感激!谢谢!

4

2 回答 2

4

这是进行此更改并内联保存更改的替代解决方案: sed

sed -E -i.bak 's/[^[:blank:]]+$/unknown &/' *.txt
于 2020-04-27T14:09:25.473 回答
1

编辑:根据 OP 的评论添加解决方案以将输出保存到输出文件中尝试以下操作。

awk '
FNR==1{
  close(out_file)
  sub(/\./,"_new&",FILENAME)
  out_file=FILENAME
}
{
  $NF="unknown" OFS $NF
  print > (out_file)
}'  *.bed


如果您不担心行之间的空格,那么您可以尝试以下操作。

awk '{$NF="unknown" OFS $NF} 1'  Input_file

或者使用 GNUawk最新版本尝试:

gawk -i inplace -v INPLACE_SUFFIX=.bak '{$NF="unknown" OFS $NF} 1'  Input_file(s)


为了使空间看起来不错,您也可以添加column到上面的命令:

awk '{$NF="unknown" OFS $NF} 1'  Input_file | column -t

或者使用 GNUawk最新版本尝试:

gawk -i inplace -v INPLACE_SUFFIX=.bak '{$NF="unknown" OFS $NF} 1'  Input_file | column -t
于 2020-04-27T13:57:43.513 回答