使用 #SBATCH 向多个文件 (900+) 添加一列

Adding a column to multiple files (900+) using #SBATCH

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

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 ' =  FS "unknown"' <file> > <new_file>

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

我对堆栈溢出还很陌生,所以非常感谢任何帮助!谢谢!

编辑: 根据 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

或使用 GNU awk 最新版本尝试:

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

或使用 GNU awk 最新版本尝试:

gawk -i inplace -v INPLACE_SUFFIX=.bak '{$NF="unknown" OFS $NF} 1'  Input_file | column -t

这是一个备选方案 sed 解决方案,用于进行此更改并内联保存更改:

sed -E -i.bak 's/[^[:blank:]]+$/unknown &/' *.txt