【发布时间】:2011-07-19 10:57:07
【问题描述】:
如何从 TAB 分隔的字符串中选择第一列?
# 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
【问题讨论】:
-
awk 'BEGIN { FS = "[ \t]+" } ; { print $1 }' # 这就是我要找的。我的谷歌搜索正确吗? :)
-
感谢这条评论,我发现:
awk 'BEGIN {FS="\t"}; {print $1,FS,$2,FS,$3}' myFile.txt打印前三列的制表符分隔值。 -
或者只是
awk 'BEGIN {OFS="\t"}; {print $1,$2,$3}' -
GNU 和 BSD awk 都支持
-v设置变量。在 内联程序 中使用BEGIN {FS="\t"}是很丑陋的,而且您尝试做出的任何开源贡献都可能会遭到反对。只有在编写程序文件 时才这样做。此外,不鼓励使用-F而不是-v FS=,因为后者清楚地表明只有FS被设置,而不是OFS。对最后一点的困惑首先是导致这篇文章的原因。这就是为什么“好风格”很重要。 -
拜托,没有人应该做@Wok 演示的事情。您不会在输出中枚举 [Input] 字段分隔符。您可以通过
OFS变量指定输出字段分隔符。
标签: awk