我有这样的文本:
word1 word2 word3 word4
在每一行中,可能会有一个单词对之间的多个空格,我想从每一行中获取一些单词列。当我使用 cat file | cut -d ' ' -f1,2,4
时,似乎有些字段是空格,这不是我期望的结果。我知道 awk
可以实现这一点。问题是我们能否仅使用 cut
来完成此操作?也就是说,我们可以将多个空格设置为 cut
的分隔符,但数量会变化吗?
正如其他人所说,cut
不能单独完成这个任务(而且awk
是最好的选择,因为它是唯一必要的工具)。如果你仍然想使用cut
,你可以将其与tr
结合使用:
tr -s ' ' <<<"word1 word2 word3 word4" | cut -d ' ' -f1,2,4
tr -s ' '
将连续的多个空格折叠成一个空格。
awk
。打那么多花括号,还要打出print
和美元符号。只要记住“压缩”选项的-s
,然后将其通过tr
管道传递即可。它甚至比awk
少一个字符。有什么不喜欢的呢? - NeilG使用 awk
,兄弟们:awk '{print $1, $2, $4;}' file
感谢 @fedorqui 的建议
awk '{print $1, $2, $4;}' file
这条命令足以,不需要使用 cat
命令。该命令的作用是从文件中读取数据,并打印每行的第一、第二和第四个字段。 - fedorquiline="word1 word2 word3 word4"
set -- $line # no quotes here!
echo $1 $2 $4
word1 word2 word4
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
while read col1 col2 col3 col4
do
echo "$col1 $col2 $col4"
done < file
read
来避免使用cut
或任何其他外部工具。while read f1 f2 _ f4; do echo "$f1 $f2 $f4"; done < file
在这里,_
只是作为第三个字段的无用变量。