0

我有一个名为“file”的文件,其中有一些字段用分隔符分隔。该文件的结构是:

@field1@field2@field3@field4

使用 awk 我提取了没有分隔符的字段。

vr=$file;

sep_mx=`echo $vr | awk '{
    n=split($0,x,"@");
    print n
}'` 
echo $sep_mx
## here the number of substring produced is calc.

while ((i<=$max)); 
do
    # would print individual substring one at a
    # time as the counter increases.
    echo $vr | awk -v er=$i '{
        n=split($0,x,"@"); print x[er]
    }'
    ((i+=1))
done

输出是:

field1
field2
field3
field4

如果我只想从我刚刚发布的代码中提取第二个字段,我该怎么做?谢谢

4

4 回答 4

5

这应该使它:

awk -F@ '{print $3}' file

一般来说,尝试使用-F. 它的意思是“字段分隔符”,让您的生活更轻松,无需拆分、substr 之类的东西。

测试

$ awk -F@ '{print $3}' file
field2
于 2013-06-06T08:43:25.323 回答
2

bash

$ while IFS=@ read -r col1 col2 col3 col4; do 
      echo $col3
  done <<< '@field1@field2@field3@field4'
field2

另一种方式awk

$ awk '{split($0,ary,/@/); print ary[3]}' <<< '@field1@field2@field3@field4'
field2
于 2013-06-06T10:40:50.947 回答
1

GNU sed 调用

sed -r 's/\W\w+\W(\w+).*/\1/' file

输出

field2
于 2013-06-06T13:45:40.963 回答
0

你的代码没有意义。如果想转换

@field1@field2@field3@field4

field1
field2
field3
field4

那么您所需要的就是这个(或任何其他简单的解决方案):

$ cat file
@field1@field2@field3@field4
$ 
$ gawk -v RS='[@\n]' 'NR>1' file
field1
field2
field3
field4

如果你想打印文本“field3”那么它很简单:

$ gawk -v RS='[@\n]' 'NR==4' file 
field3

记录号是 4 而不是 3,因为您的文件以“@”开头,因此“field1”之前有一条空记录。

如果您告诉我们您真正想要做什么,我们可以帮助您,到目前为止,您似乎走错了路。

于 2013-06-06T16:00:25.273 回答