SHELL从最后一个元素中删除逗号

时间:2018-10-15 13:50:35

标签: bash

我已经被困了几个小时了。除了不知道如何获取最后一个元素以及如何删除该逗号而不影响其他元素,我想删除表中最后一个元素的逗号。

元素如下:

DIR_PLG40AT : 145_PLG40AT.0234.tsv, DIR_PLG40AT : 146_PLG40AT.0234.tsv, 
DIR_PLG40AT : 222_PLG40AT.0234.tsv, DIR_PLG40AT : 043_PLG40AT.0234.tsv, 
DIR_PLG40AT : 045_PLG40AT.0234.tsv, DIR_PLG40AT : 193_PLG40AT.0234.tsv, 
DIR_PLG40AT : 025_PLG40AT.0234.tsv, DIR_PLG40AT : 073_PLG40AT.0234.tsv, 
DIR_PLG40AT : 232_PLG40AT.0234.tsv, DIR_PLG40AT : 161_PLG40AT.0234.tsv, 
DIR_PLG40AT : 147_PLG40AT.0234.tsv, DIR_PLG40AT : 075_PLG40AT.0234.tsv, 
DIR_PLG40AT : 245_PLG40AT.0234.tsv, DIR_PLG40AT : 256_PLG40AT.0234.tsv, 
DIR_PLG40AT : 096_PLG40AT.0234.tsv, DIR_PLG40AT : 054_PLG40AT.0234.tsv, 
DIR_PLG40AT : 259_PLG40AT.0234.tsv, DIR_PLG40AT : 154_PLG40AT.0234.tsv, 
DIR_PLG40AT : 211_PLG40AT.0234.tsv, DIR_PLG40AT : 198_PLG40AT.0234.tsv, 
DIR_PLG40AT : 164_PLG40AT.0234.tsv, DIR_PLG40AT : 213_PLG40AT.0234.tsv, 
DIR_PLG40AT : 155_PLG40AT.0234.tsv, DIR_PLG40AT : 175_PLG40AT.0234.tsv, 
DIR_PLG40AT : 092_PLG40AT.0234.tsv, DIR_PLG40AT : 212_PLG40AT.0234.tsv, 
DIR_PLG40AT : 097_PLG40AT.0234.tsv, DIR_PLG40AT : 151_PLG40AT.0234.tsv, 
DIR_PLG40AT : 011_PLG40AT.0234.tsv, DIR_PLG40AT : 021_PLG40AT.0234.tsv, 
DIR_PLG40AT : 063_PLG40AT.0234.tsv, DIR_PLG40AT : 121_PLG40AT.0234.tsv, 
DIR_PLG40AT : 171_PLG40AT.0234.tsv, DIR_PLG40AT : 234_PLG40AT.0234.tsv, 
DIR_PLG40AT : 012_PLG40AT.0234.tsv, DIR_PLG40AT : 197_PLG40AT.0234.tsv, 
DIR_PLG40AT : 052_PLG40AT.0234.tsv, DIR_PLG40AT : 074_PLG40AT.0234.tsv, 
DIR_PLG40AT : 242_PLG40AT.0234.tsv, DIR_PLG40AT : 231_PLG40AT.0234.tsv, 
DIR_PLG40AT : 095_PLG40AT.0234.tsv, DIR_PLG40AT : 243_PLG40AT.0234.tsv, 
DIR_PLG40AT : 162_PLG40AT.0234.tsv, DIR_PLG40AT : 196_PLG40AT.0234.tsv, 
DIR_PLG40AT : 148_PLG40AT.0234.tsv, DIR_PLG40AT : 179_PLG40AT.0234.tsv, 
DIR_PLG40AT : 022_PLG40AT.0234.tsv, DIR_PLG40AT : 173_PLG40AT.0234.tsv, 
DIR_PLG40AT : 165_PLG40AT.0234.tsv, DIR_PLG40AT : 014_PLG40AT.0234.tsv, 
DIR_PLG40AT : 024_PLG40AT.0234.tsv, DIR_PLG40AT : 223_PLG40AT.0234.tsv, 
DIR_PLG40AT : 093_PLG40AT.0234.tsv, DIR_PLG40AT : 041_PLG40AT.0234.tsv, 
DIR_PLG40AT : 071_PLG40AT.0234.tsv, DIR_PLG40AT : 091_PLG40AT.0234.tsv, 
DIR_PLG40AT : 144_PLG40AT.0234.tsv, DIR_PLG40AT : 235_PLG40AT.0234.tsv, 
DIR_PLG40AT : 225_PLG40AT.0234.tsv, DIR_PLG40AT : 163_PLG40AT.0234.tsv, 
DIR_PLG40AT : 233_PLG40AT.0234.tsv, DIR_PLG40AT : 122_PLG40AT.0234.tsv, 
DIR_PLG40AT : 194_PLG40AT.0234.tsv, DIR_PLG40AT : 023_PLG40AT.0234.tsv, 
DIR_PLG40AT : 051_PLG40AT.0234.tsv, DIR_PLG40AT : 143_PLG40AT.0234.tsv, 
DIR_PLG40AT : 215_PLG40AT.0234.tsv, DIR_PLG40AT : 125_PLG40AT.0234.tsv, 
DIR_PLG40AT : 251_PLG40AT.0234.tsv, DIR_PLG40AT : 176_PLG40AT.0234.tsv, 
DIR_PLG40AT : 177_PLG40AT.0234.tsv, DIR_PLG40AT : 191_PLG40AT.0234.tsv, 
DIR_PLG40AT : 252_PLG40AT.0234.tsv, DIR_PLG40AT : 254_PLG40AT.0234.tsv, 
DIR_PLG40AT : 124_PLG40AT.0234.tsv, DIR_PLG40AT : 055_PLG40AT.0234.tsv, 
DIR_PLG40AT : 253_PLG40AT.0234.tsv, DIR_PLG40AT : 056_PLG40AT.0234.tsv, 
DIR_PLG40AT : 016_PLG40AT.0234.tsv, DIR_PLG40AT : 195_PLG40AT.0234.tsv, 
DIR_PLG40AT : 142_PLG40AT.0234.tsv, DIR_PLG40AT : 042_PLG40AT.0234.tsv, 
DIR_PLG40AT : 221_PLG40AT.0234.tsv, DIR_PLG40AT : 241_PLG40AT.0234.tsv, 
DIR_PLG40AT : 065_PLG40AT.0234.tsv, DIR_PLG40AT : 013_PLG40AT.0234.tsv, 
DIR_PLG40AT : 015_PLG40AT.0234.tsv, DIR_PLG40AT : 094_PLG40AT.0234.tsv, 
DIR_PLG40AT : 258_PLG40AT.0234.tsv, DIR_PLG40AT : 026_PLG40AT.0234.tsv, 
DIR_PLG40AT : 172_PLG40AT.0234.tsv, DIR_PLG40AT : 064_PLG40AT.0234.tsv, 
DIR_PLG40AT : 199_PLG40AT.0234.tsv, DIR_PLG40AT : 072_PLG40AT.0234.tsv, 
DIR_PLG40AT : 224_PLG40AT.0234.tsv, DIR_PLG40AT : 214_PLG40AT.0234.tsv, 
DIR_PLG40AT : 152_PLG40AT.0234.tsv,

代码:

for fichier in `find $rep -type f`
do
  fichier=$(basename "$fichier")
  tmp+="$variableFinal DIR_PLG40AT : $fichier,"
done


tableau=${#tmp[*]}
for (( i=0; i<tableau; i++ )) 
do
    chaine=${tmp[i]}
done

目标是然后将此字符串传递给ExternalTables脚本

谢谢!

2 个答案:

答案 0 :(得分:0)

如果您使用的是bash的现代版本(> = 4.0版),则可以完全不用查找:

#!/bin/bash
shopt -s globstar
tmp=""
for f in **/*; do
    tmp+="DIR_PLG40AT : $(basename "$f"),"
done
echo "${tmp%,}"

否则:

#!/bin/bash
tmp=""
while IFS= read -d '' -r f; do
    tmp+="DIR_PLG40AT : $(basename "$f"),"
done < <(find . -type f -print0)
echo "${tmp%,}"

这只是简单地将新值重复添加到字符串上;最后,逗号可以easily be removedfind版本为a bit complicated,但对于带有空格的文件名是安全的。


我假设您的文件位于多个子目录中,或者在任何情况下您都不需要find,并且可以这样做:

#!/bin/bash
tmp=""
for f in *; do
    tmp+="DIR_PLG40AT : $(basename "$f"),"
done
echo "${tmp%,}"

答案 1 :(得分:-1)

sed可以胜任这项工作。这是您要找的吗?。

> cat table.dat
DIR_PLG40AT : 145_PLG40AT.0234.tsv, DIR_PLG40AT : 146_PLG40AT.0234.tsv,
DIR_PLG40AT : 222_PLG40AT.0234.tsv, DIR_PLG40AT : 043_PLG40AT.0234.tsv,
DIR_PLG40AT : 045_PLG40AT.0234.tsv, DIR_PLG40AT : 193_PLG40AT.0234.tsv,
DIR_PLG40AT : 025_PLG40AT.0234.tsv, DIR_PLG40AT : 073_PLG40AT.0234.tsv,
> sed 's/,\s*$//g' table.dat
DIR_PLG40AT : 145_PLG40AT.0234.tsv, DIR_PLG40AT : 146_PLG40AT.0234.tsv
DIR_PLG40AT : 222_PLG40AT.0234.tsv, DIR_PLG40AT : 043_PLG40AT.0234.tsv
DIR_PLG40AT : 045_PLG40AT.0234.tsv, DIR_PLG40AT : 193_PLG40AT.0234.tsv
DIR_PLG40AT : 025_PLG40AT.0234.tsv, DIR_PLG40AT : 073_PLG40AT.0234.tsv
>