我的文字是這樣的:cut:我們可以設置多個空格作爲分隔符嗎?
word1 word2 word3 word4
有可能是對詞之間的一個以上的空間,我想從每行得到的話一些欄目。當我使用cat file | cut -d ' ' -f1,2,4
似乎有些領域是空間,這不是我所期望的。我知道awk
可以實現這一點。問題是我們可以只用cut
來做到這一點嗎?即,我們可以在cut
中設置多個空格作爲分隔符,但數字是否有所不同?
我的文字是這樣的:cut:我們可以設置多個空格作爲分隔符嗎?
word1 word2 word3 word4
有可能是對詞之間的一個以上的空間,我想從每行得到的話一些欄目。當我使用cat file | cut -d ' ' -f1,2,4
似乎有些領域是空間,這不是我所期望的。我知道awk
可以實現這一點。問題是我們可以只用cut
來做到這一點嗎?即,我們可以在cut
中設置多個空格作爲分隔符,但數字是否有所不同?
使用awk
,兄弟:awk '{print $1, $2, $4;}' file
謝謝@fedorqui的sugesstion
'awk'{print $ 1,$ 2,$ 4;}'file'就足夠了,不需要'cat'。 – fedorqui
不,對不起,分隔符總是隻有一個字符。但是你可以使用閱讀代替
while read col1 col2 col3 col4
do
echo "$col1 $col2 $col4"
done < file
傳遞給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
之前,假設你有一個合理的IFS(如IFS=$' \n\t'
)使用Word分裂正如其他人所說,cut
不能單獨做(而awk
是最好的選擇,因爲因爲它是唯一需要的工具)。如果你仍然想使用cut
,你可以用tr
但是結合起來,:
tr -s ' ' <<<"word1 word2 word3 word4" | cut -d ' ' -f1,2,4
tr -s ' '
摺疊多個空格的每個跨度爲每一個空間。
此外,您還可以使用位置參數
line="word1 word2 word3 word4"
set -- $line # no quotes here!
echo $1 $2 $4
word1 word2 word4
由於bash的默認內部字段分隔符是空白,你能避免使用BASH read
內建命令使用cut
或任何其他外部工具。
while read f1 f2 _ f4; do echo "$f1 $f2 $f4"; done < file
在此,簡單地_
充當第三字段一個垃圾變量。
由於空格是分隔符,因此值不能有空格。這些值實際上是空字符串。 –