我如何将“ ls”输出附加到文本文件中前一行的末尾,并且之间留有空格?

问题描述 投票:0回答:3

如何将ls输出附加到文本文件中一行的末尾,而不是文件末尾的单独一行?

例如,当我这样做时:

ls ${OUTDIR}/{SUB}/rh.*fs6.nii.gz >> practice.txt
ls ${OUTDIR}/{SUB}/lh.*fs6.nii.gz >> practice.txt

它在文本文件中显示为:

user/sb/sub/rh.5432.fs6.nii.gz
user/sb/sub/lh.5432.fs6.nii.gz

但是我需要它看起来像这样:

user/sb/sub/rh.5432.fs6.nii.gz user/sb/sub/lh.5432.fs6.nii.gz

我需要bash中的修复程序,并在-n之后尝试了ls

bash ls
3个回答
0
投票

怎么样:

awk -v v="$(echo `ls -C ${OUTDIR}/${SUB}/lh.*fs6.nii.gz`)" '
  BEGIN{printf >> "practice"}
  NR>1{print line}
  {line=$0}
  END{print line, v}
' practice.txt > p2.txt ; mv p2.txt practice.txt

0
投票

您可以简单地使用[...]中包含的特殊模式字符来匹配lr,这将导致单个ls命令使用lh来匹配rh[lr]h ]。您的情况:

ls ${OUTDIR}/{SUB}/[lr]h.*fs6.nii.gz >> practice.txt

[note:如果您打算使用'$',则您似乎在表达式中的${SUB}之前缺少SUB=sub


0
投票

首先要注意的是,当您执行some_command rh.*fs6.nii.gz时,它是将表达式rh.*fs6.nii.gz扩展为文件系统中存在并与模式匹配的文件名列表的外壳,并将该列表传递给some_command作为单独的参数。

ls输出文件系统中存在的每个参数一行。 echo以空格分隔输出其参数。因此,如果要输出用空格分隔的文件,则echo更适合您的用途,例如:

echo "${OUTDIR}/${SUB}"/rh.*fs6.nii.gz "${OUTDIR}/${SUB}"/lh.*fs6.nii.gz >> practice.txt

在此特定示例中,正如[C​​0]所指出的那样,全局模式也可以帮助您使命令更紧凑:

@david-c-rankin

并且不要忘记在命令行参数中使用双引号(就像我在上面所有示例中所做的那样。)>

最后,无论如何echo "${OUTDIR}/${SUB}"/[lr]h.*fs6.nii.gz >> practice.txt ,请记住始终寻找更好的替代方案。

© www.soinside.com 2019 - 2024. All rights reserved.