【发布时间】:2016-07-08 20:56:26
【问题描述】:
我有超过 100 个文件,每个文件至少有 5-8 列(制表符分隔)。我需要从每个文件中提取前三列,并在第四列中添加一些预定义的文本并附加它们。
假设我有 3 个文件:file001.txt、file002.txt、file003.txt。
file001.txt:
chr1 1 2 15
chr2 3 4 17
file002.txt:
chr1 1 2 15
chr2 3 4 17
file003.txt:
chr1 1 2 15
chr2 3 4 17
combined_file.txt:
chr1 1 2 f1
chr2 3 4 f1
chr1 1 2 f2
chr2 3 4 f2
chr1 1 2 f3
chr2 3 4 f3
为简单起见,我保持文件内容相同。 我的脚本如下:
#!/bin/bash
for i in {1..3}; do
j=$(printf '%03d' $i)
awk 'BEGIN { OFS="\t"}; {print $1,$2,$3}' file${j}.txt | awk -v k="$j" 'BEGIN {print $0"\t$k”}' | cat >> combined_file.txt
done
但脚本给出以下错误:
awk: 非终止字符串 $k”}... 在源代码第 1 行 上下文是
有人能帮我弄清楚吗?
【问题讨论】:
-
你有一个问题陈述,再加上你有一个 bash 脚本解决(我假设)是你问题的一部分。你被困在哪里了?我错过了一个问题。它也与您的 file00
.txt 混淆,其中所有文件都具有完全相同的内容。 -
@mattias,帖子已编辑。
-
你在这里混合了一些特殊字符。请注意 BEGIN 语句
'BEGIN {print $0"\t$k”}'中“和”之间的区别。这应该可以让您摆脱遇到的错误。但是您可能在 awk 命令中遇到其他问题。 -
@mattias,谢谢。它现在正在工作,但将第四列打印为 $k 而不是它的值。
-
使用 echo $k 而不是 BEGIN {print $0"\t$k"}