2011-03-21 204 views
59

如何從TAB分隔的字符串中選擇第一列?awk中的製表符分隔值

# echo "LOAD_SETTLED LOAD_INIT  2011-01-13 03:50:01" | awk -F'\t' '{print $1}' 

以上將返回整個行,而不是像預期的那樣只是「LOAD_SETTLED」。

更新:

我需要改變的製表符分隔值的第三列。 以下不起作用。

echo $line | awk 'BEGIN { -v var="$mycol_new" FS = "[ \t]+" } ; { print $1 $2 var $4 $5 $6 $7 $8 $9 }' >> /pdump/temp.txt 

但是,如果分隔符是逗號而不是製表符,則按預期工作。

echo $line | awk -v var="$mycol_new" -F'\t' '{print $1 "," $2 "," var "," $4 "," $5 "," $6 "," $7 "," $8 "," $9 "}' >> /pdump/temp.txt 
+3

AWK「BEGIN {FS = 「[\噸] +」}; {print $ 1}'#這就是我一直在尋找的東西。我的谷歌搜索是否正確? :) – shantanuo 2011-03-21 05:50:14

+2

感謝這個評論,我發現:'awk'BEGIN {FS =「\ t」}; {print $ 1,FS,$ 2,FS,$ 3}'myFile.txt'打印前三列的製表符分隔值。 – Wok 2013-05-30 09:33:11

+3

或者只是'awk'BEGIN {OFS =「\ t」}; {print $ 1,$ 2,$ 3}'' – 2015-07-22 03:07:19

回答

100

您需要設置OFS變量(輸出字段分隔符)是一個標籤:

echo "$line" | 
awk -v var="$mycol_new" -F $'\t' 'BEGIN {OFS = FS} {$3 = var; print}' 

(確保你在echo語句中引用$line變量)

+17

對於'$'\ t'' +1 :) – 2011-10-24 21:00:51

+2

$ in $'\ t'的用途是什麼? – 2013-05-11 11:55:06

+9

從[高級Bash腳本指南](http://tldp.org/LDP/abs/html/escapingsection.html)回答我自己的問題:$'...'帶引號的字符串擴展結構是一種機制,它使用轉義八進制或十六進制值...,例如quote = $'\ 042'。 – 2013-05-11 12:34:14

12

確保它們真的是標籤!在bash中,你可以插入使用了Cv TAB製表

$ echo "LOAD_SETTLED LOAD_INIT  2011-01-13 03:50:01" | awk -F$'\t' '{print $1}' 
LOAD_SETTLED 
5
echo "LOAD_SETTLED LOAD_INIT  2011-01-13 03:50:01" | awk -v var="test" 'BEGIN { FS = "[ \t]+" } ; { print $1 "\t" var "\t" $3 }' 
0

這應該不行嗎?

echo "LOAD_SETTLED LOAD_INIT  2011-01-13 03:50:01" | awk '{print $1}' 
相關問題