如何将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
。
怎么样:
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
您可以简单地使用[...]
中包含的特殊模式字符来匹配l
和r
,这将导致单个ls
命令使用lh
来匹配rh
和[lr]h
]。您的情况:
ls ${OUTDIR}/{SUB}/[lr]h.*fs6.nii.gz >> practice.txt
([note:如果您打算使用'$'
,则您似乎在表达式中的${SUB}
之前缺少SUB=sub
首先要注意的是,当您执行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
在此特定示例中,正如[C0]所指出的那样,全局模式也可以帮助您使命令更紧凑:
@david-c-rankin
并且不要忘记在命令行参数中使用双引号(就像我在上面所有示例中所做的那样。)>
最后,无论如何echo "${OUTDIR}/${SUB}"/[lr]h.*fs6.nii.gz >> practice.txt
,请记住始终寻找更好的替代方案。