在 bash 中组合 Grep 和 Paste 命令
Combining Grep and Paste command in bash
很抱歉问了一个愚蠢的问题,但我对这件事很着迷。
所以,我在 bash 并且我有一些文件:
ls
a.bed
b.bed
c.bed
我想要做的就是创建一个变量,其中所有 3 个变量都用逗号分隔,这是我搜索的输出:
a.bed, b.bed, c.bed
我现在使用的是(但有空格而不是逗号):
beds=$(ls|grep .bed)
其中有
a.bed b.bed c.bed
非常感谢
我会使用 printf
及其 -v
选项,然后使用参数扩展。
$ printf -v beds '%s, ' *.bed
$ beds=${beds%, }
第一行产生a.bed, b.bed, c.bed,
。第二行修剪尾随 ,
.
如果您只需要一个单字符分隔符,另一种方法是使用带有 IFS
:
的数组
$ beds=$(a=(*.bed); IFS=,; echo "${a[*]}")
您可以单独使用 ls 'x' 和 'm' 选项:
beds=$(ls -xm *.bed)
echo $beds
a.bed, b.bed, c.bed
这是一个有点古怪的:
beds=$( tr \ , <<< $(ls *.bed))
在上面的示例中,我们通过使用 $()
执行它来删除 ls
输出中的换行符。然后我们使用生成的字符串作为 tr
的输入,用逗号替换所有空格。
我最喜欢的是在 ls 中使用内置的 -xm 参数,但这个特定的答案可以应用于其他不提供 ls
提供的丰富输出格式集的可执行文件。
对于这个特定的案例有点矫枉过正,但仅供参考,您可以这样做:
$ bedsArr=( *.bed )
$ bedsStr=$( printf '%s, ' "${bedsArr[@]:0:$((${#bedsArr[@]} - 1))}"; printf "%s\n" "${bedsArr[@]: -1:1}" )
$ printf '%s\n' "$bedsStr"
a.bed, b.bed, c.bed
很抱歉问了一个愚蠢的问题,但我对这件事很着迷。
所以,我在 bash 并且我有一些文件:
ls
a.bed
b.bed
c.bed
我想要做的就是创建一个变量,其中所有 3 个变量都用逗号分隔,这是我搜索的输出:
a.bed, b.bed, c.bed
我现在使用的是(但有空格而不是逗号):
beds=$(ls|grep .bed)
其中有
a.bed b.bed c.bed
非常感谢
我会使用 printf
及其 -v
选项,然后使用参数扩展。
$ printf -v beds '%s, ' *.bed
$ beds=${beds%, }
第一行产生a.bed, b.bed, c.bed,
。第二行修剪尾随 ,
.
如果您只需要一个单字符分隔符,另一种方法是使用带有 IFS
:
$ beds=$(a=(*.bed); IFS=,; echo "${a[*]}")
您可以单独使用 ls 'x' 和 'm' 选项:
beds=$(ls -xm *.bed)
echo $beds
a.bed, b.bed, c.bed
这是一个有点古怪的:
beds=$( tr \ , <<< $(ls *.bed))
在上面的示例中,我们通过使用 $()
执行它来删除 ls
输出中的换行符。然后我们使用生成的字符串作为 tr
的输入,用逗号替换所有空格。
我最喜欢的是在 ls 中使用内置的 -xm 参数,但这个特定的答案可以应用于其他不提供 ls
提供的丰富输出格式集的可执行文件。
对于这个特定的案例有点矫枉过正,但仅供参考,您可以这样做:
$ bedsArr=( *.bed )
$ bedsStr=$( printf '%s, ' "${bedsArr[@]:0:$((${#bedsArr[@]} - 1))}"; printf "%s\n" "${bedsArr[@]: -1:1}" )
$ printf '%s\n' "$bedsStr"
a.bed, b.bed, c.bed