使用 #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
我正在尝试向文件中添加一列:
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