我正在bash脚本中逐行读取文本文件中的文件名。但是线条看起来像这样:
/path/to/myfile1.txt 1
/path/to/myfile2.txt 2
/path/to/myfile3.txt 3
...
/path/to/myfile20.txt 20
因此,第二列包含按空格分隔的整数。我只需要空格前的字符串部分。 我发现只有使用“for-loop”的解决方案。但我需要一个函数,在我的字符串中显式查找“ - 字符(空格)”并在那时将其拆分。
原则上我需要相当于Matlabs“strsplit(str,delimiter)”
答案 0 :(得分:3)
如果您已经使用类似
的内容阅读该文件while read -r line; do
(和you should be),然后将两个参数传递给read
:
while read -r filename somenumber; do
read
会在空格上拆分该行,并将第一个字段分配给filename
,将剩余的字段分配给somenumber
。
答案 1 :(得分:2)
三个(众多)解决方案:
# Using awk
echo "$string" | awk '{ print $1 }'
# Using cut
echo "$string" | cut -d' ' -f1
# Using sed
echo "$string" | sed 's/\s.*$//g'
答案 2 :(得分:1)
如果您需要反复遍历文件的每一行,可以使用bash
切断空间后面的所有内容:
while read -r line ; do
# bash string manipulation removes the space at the end
# and everything which follows it
echo ${line// *}
done < file
答案 3 :(得分:1)
这也应该有效:
line="${line% *}"
这会剪切字符串在空格的最后一次出现(从左侧)。因此,即使路径包含空格(只要它跟在末尾的空格后面),它也会起作用。
答案 4 :(得分:0)
while read -r line
do
{ rev | cut -d' ' -f2- | rev >> result.txt; } <<< $line
done < input.txt
即使您的文件名中有空格,此解决方案仍然有效。