shell CUT是否支持多个空格作为分隔符?

jc3wubiy  于 2023-06-06  发布在  Shell
关注(0)|答案(7)|浏览(777)

我有这样的文字:

word1 word2   word3  word4

一对单词之间可能有多个空格,我想从每行中得到几列单词。当我使用cat file | cut -d ' ' -f1,2,4时,似乎有些字段是空格,这不是我所期望的。我知道awk可以实现这一点。问题是,我们只能用cut来实现这一点吗?也就是说,我们可以在cut中设置多个空格作为分隔符,但数量不同吗?

jdg4fx2g

jdg4fx2g1#

正如其他人所说,cut不能单独完成(而awk是最佳选择,因为它是唯一需要的工具)。如果你仍然想使用cut,你可以将它与tr结合使用,但是:

tr -s ' ' <<<"word1 word2   word3  word4" | cut -d ' ' -f1,2,4

tr -s ' '将多个空间的每个跨度折叠成一个空间。

8qgya5xd

8qgya5xd2#

使用awk,兄弟:awk '{print $1, $2, $4;}' file
谢谢@fedorqui的建议

oknrviil

oknrviil3#

不你不能如果你希望能够使用多个字符(甚至是正则表达式)作为分隔符,那么可以使用awk。

hm2xizp9

hm2xizp94#

此外,还可以使用位置参数

line="word1 word2   word3  word4"
set -- $line                       # no quotes here!
echo $1 $2 $4
word1 word2 word4
yruzcnhs

yruzcnhs5#

假设您有一个合理的IFS(例如:IFS=$' \n\t')在传递到cut之前使用字拆分

$ var="word1 word2   word3  word4"; echo $var
word1 word2 word3 word4
$ var="word1 word2   word3  word4"; echo $var | cut -d ' ' -f1,2,4
word1 word2 word4

所以对你来说

$ var=$(cat "file"); echo $var | cut -d ' ' -f1,2,4
cwxwcias

cwxwcias6#

不,对不起,cut 中的分隔符始终只有一个字符。但是你可以用 read 代替

while read col1 col2 col3 col4
do
    echo "$col1 $col2 $col4"
done < file
a6b3iqyw

a6b3iqyw7#

由于BASH的默认内部字段分隔符是空白,因此可以通过使用BASH read内置命令来避免使用cut或任何其他外部工具。

while read f1 f2 _ f4; do echo "$f1 $f2 $f4"; done < file

在这里,_只是作为第三个字段的垃圾变量。

相关问题