我正在按bash脚本中的线条读取文本文件的文件名。但是线看起来像这样:
/path/to/myfile1.txt 1
/path/to/myfile2.txt 2
/path/to/myfile3.txt 3
...
/path/to/myfile20.txt 20
因此,有第二列包含由空间启用的整数编号。在空间之前,我只需要字符串的部分。我仅使用"循环"找到解决方案。但是我需要一个函数,可以明确查找我的字符串中的" - character(Space)并在此时将其分配。
原则上我需要等效到matlabs" strsplit(str,定界符)"
如果您已经用
之类的内容读取文件while read -r line; do
(您应该是),然后将两个参数传递给read
:
while read -r filename somenumber; do
read
将在空格上拆分行,并将第一个字段分配给filename
,并将其余的任何字段分配给somenumber
。
三个(许多)解决方案:
# Using awk
echo "$string" | awk '{ print $1 }'
# Using cut
echo "$string" | cut -d' ' -f1
# Using sed
echo "$string" | sed 's/s.*$//g'
如果您需要迭代文件的每一行,则可以用bash
切断空间后面的所有内容:
while read -r line ; do
# bash string manipulation removes the space at the end
# and everything which follows it
echo ${line// *}
done < file
这也应该有效:
line="${line% *}"
这将绳子切割为空间的最后一次发生(从左起)。因此,即使路径包含空间,它也可以工作(只要在结束时遵循一个空间)。
while read -r line
do
{ rev | cut -d' ' -f2- | rev >> result.txt; } <<< $line
done < input.txt
即使您的文件名中的空格也可以工作。