我有一个文件名列表-由
f="HDAC3_CTRL_Diff-D0_A.dedup.sorted.bam HDAC3_CTRL_Diff-D0_B.dedup.sorted.bam"我希望我的操作选择文本"HDAC3_CTRL_Diff-D0_A.dedup.sorted.bam"并将其处理为"HDAC3_CTRL_Diff-D0_A"
我在努力
echo $f | awk '/_A/ { echo }' | sed 's/.dedup.sorted.bam//g' 但我一开始就被困在
awk '/_A/ { echo }' $f 给了我错误
awk: fatal: cannot open file `HDAC3_CTRL_Diff-D0_A.dedup.sorted.bam' for reading (No such file or directory)我不想让它打开任何文件。我只希望它解析列表以生成一个截断的字符串。
发布于 2019-03-21 11:34:22
1解决方案: In awk它不像BASH那样工作,我们有一个单独的print函数,echo不能在其中工作。您可以尝试如下(这将删除从.到最后一行的所有传递变量的所有部分。
echo "$f" | awk '{for(i=1;i<=NF;i++){sub(/\..*/,"",$i);print $i}}'
HDAC3_CTRL_Diff-D0_A
HDAC3_CTRL_Diff-D0_B第二种解决方案,如果您想查找特定的字符串并从其中移除某些部分,请尝试如下:
echo "$f" | awk 'match($0,/HDAC3[^ ]*/){val=substr($0,RSTART,RLENGTH);sub(/\..*/,"",val);print val}'
HDAC3_CTRL_Diff-D0_A或(一种非一元线性溶液形式):
f="HDAC3_CTRL_Diff-D0_A.dedup.sorted.bam HDAC3_CTRL_Diff-D0_B.dedup.sorted.bam"
echo "$f" |
awk '
match($0,/HDAC3[^ ]*/){
val=substr($0,RSTART,RLENGTH)
sub(/\..*/,"",val)
print val
}
'第三种解决方案:,以防有人想要查找确切的字符串,然后尝试如下。
echo "$f" | awk 'match($0,/HDAC3_CTRL_Diff-D[0-9]+_A/){print substr($0,RSTART,RLENGTH)}'第4种解决方案:在不同字段的行中可能出现多次_A,然后尝试如下。
假设变量f具有以下值。
echo "$f"
HDAC3_CTRL_Diff-D0_A.dedup.sorted.bam HDAC3_CTRL_Diff-D0_B.dedup.sorted.bam HDAC3_CTRL_Diff-D01_A.dedup.sorted.bam现在当我们运行新代码::时
echo "$f" | awk '{for(i=1;i<=NF;i++){if($i ~ /HDAC3_CTRL_Diff-D[0-9]+_A/){print $i}}}'
HDAC3_CTRL_Diff-D0_A.dedup.sorted.bam
HDAC3_CTRL_Diff-D01_A.dedup.sorted.bamOP尝试中发现的问题:
awk中没有echo函数,而是有“`print”。awk,当你试图像awk......$f那样通过时,它意味着你要把一个Input_file传递给它,这不是这样的,所以你不应该这样做。awk并进行处理的文本,则尝试echo "text here...." | awk code here.或awk ..... <<<"$var"作为示例。发布于 2019-03-21 11:36:47
我不确定echo是否存在于awk中,您需要的是print,并且只打印第一个字段$1
$ f="HDAC3_CTRL_Diff-D0_A.dedup.sorted.bam HDAC3_CTRL_Diff-D0_B.dedup.sorted.bam"
$ echo $f | awk '/_A/ { print $1 }' | sed 's/.dedup.sorted.bam//g'
HDAC3_CTRL_Diff-D0_A打开文件的错误是因为您在命令行上将$f传递给awk,而不是将变量的内容传递到awk。awk的命令行参数被视为文件名。您可以将实际的文件名放在那里,但不能放在这个$f变量(我假设这个变量包含输入文件的一些示例内容,而不是输入文件的名称)。
发布于 2019-03-22 01:55:25
这就是你想要做的(使用GNU awk进行多个字符RS)吗?
$ echo "$f" | awk -v RS='\\s+' 'sub(/_A\.dedup\.sorted\.bam$/,"_A")'
HDAC3_CTRL_Diff-D0_Ahttps://stackoverflow.com/questions/55279451
复制相似问题