找到字段的编号

发布于 2024-11-08 23:55:10 字数 462 浏览 0 评论 0原文

我的文件中有这一行:

,2,353867835022;11,353681041426390,272023201187741,272-02f-20017-06609,353854100352;11,,,,,,,0854100352,3,00,,O,D,DATA,,,7124395,,,17687,16,HPLMN,M20MSS_TTFILE_8377_20110528170245,M20MSS,W30B22I;0GRI3,1,20110528130013,170054,1,41,,,,,,,,0,,,,,,,,,,,,,,,,,,353868001820,,,,b60a5c0014,1:353867835022::::0854100352::353854100352,,,,,,,,

是的, 这是一个逗号“,”分隔的文件。有一个数字 17687 。我想知道该行中该字段的编号是多少。 我想使用它作为基础并将其包含在 shell 脚本中。

i have this line in the file:

,2,353867835022;11,353681041426390,272023201187741,272-02f-20017-06609,353854100352;11,,,,,,,0854100352,3,00,,O,D,DATA,,,7124395,,,17687,16,HPLMN,M20MSS_TTFILE_8377_20110528170245,M20MSS,W30B22I;0GRI3,1,20110528130013,170054,1,41,,,,,,,,0,,,,,,,,,,,,,,,,,,353868001820,,,,b60a5c0014,1:353867835022::::0854100352::353854100352,,,,,,,,

Yes,
this is a comma"," separated file.there is a number 17687 .I want to know what is the number of that field in the line.
i want to use that as a base and include that in a shell script.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

云裳 2024-11-15 23:55:10

值 17687 位于字段 #26 中:

% awk -F',' '/17687/ {
    for (f = 1; f <= NF; ++f) {
        if ($f == "17687") {
            print $f " found in field number " f " of " NF " on line " NR "."
        }
    }
}' test.csv
17687 found in field number 26 of 75 on line 1.

这允许在多行的多个字段中查找 17687。

The value 17687 is in field #26:

% awk -F',' '/17687/ {
    for (f = 1; f <= NF; ++f) {
        if ($f == "17687") {
            print $f " found in field number " f " of " NF " on line " NR "."
        }
    }
}' test.csv
17687 found in field number 26 of 75 on line 1.

This allows for finding 17687 in multiple fields on multiple lines.

空心空情空意 2024-11-15 23:55:10

那么,您想要 17687 之前的逗号数量吗?一种方法是:

sed -r 's/(^.*,)17687,.*$/\1/;s/[^,]//g'|wc -c

抓取 17687 之前的所有内容,删除所有非逗号,然后计算字符数。

在脚本中使用它,您可能会执行以下操作:

FIELD_NO=`sed -r 's/(^.*,)17687,.*$/\1/;s/[^,]//g'|wc -c`
cut -d',' -f$FIELD_NO some_file

So, you want the number of commas before the 17687? One way to do it is:

sed -r 's/(^.*,)17687,.*$/\1/;s/[^,]//g'|wc -c

This grabs everything before the 17687, removes all the non-commas, and counts the number of characters.

Using this in a script, you might do something like:

FIELD_NO=`sed -r 's/(^.*,)17687,.*$/\1/;s/[^,]//g'|wc -c`
cut -d',' -f$FIELD_NO some_file
半步萧音过轻尘 2024-11-15 23:55:10

如果您愿意,您还可以使用 tr 将字段分隔符更改为换行符,使用 grep 查找行和 cat。例如:

$ cat t.csv|tr ',' '\n'|cat -n|grep  17687
    26  17687

或更好

$ cat t.csv|tr ',' '\n'|grep  -n 17687
26:17687

甚至

$ tr ',' '\n' < t.csv |grep  -n 17687
26:17687

You can also use tr to change your field separator into a newline, grep to find the line and cat if you wish. For example:

$ cat t.csv|tr ',' '\n'|cat -n|grep  17687
    26  17687

or better

$ cat t.csv|tr ',' '\n'|grep  -n 17687
26:17687

Or even

$ tr ',' '\n' < t.csv |grep  -n 17687
26:17687
隱形的亼 2024-11-15 23:55:10

与仅使用一个正则表达式的 David 版本相比,有一点小小的改进。

sed -r "s/17687,.*|[^,]*//g"  | wc -c

Small improvement over David's version using only one regular expression.

sed -r "s/17687,.*|[^,]*//g"  | wc -c
想你只要分分秒秒 2024-11-15 23:55:10

珀尔?

FLD="17687"
perl -F/,/ -slane '%h=map{$_,++$i}@F ;print $h{$fld}||0' -- -fld="$FLD"

对于您的示例,行将打印 26(从 1 开始计数)或“0”(如果未找到)。将搜索字符串的最后一个索引。

或者

perl -F/,/ -slane 'map{print}grep { $F[$_] eq $fld } 0..$#F;' -- -fld="$FLD"

将打印所有索引(从 0 开始计数)或什么也不打印...

Perl?

FLD="17687"
perl -F/,/ -slane '%h=map{$_,++$i}@F ;print $h{$fld}||0' -- -fld="$FLD"

for your example line will print 26 (counted from 1) or "0" if not found. Will search for the last index of string.

or

perl -F/,/ -slane 'map{print}grep { $F[$_] eq $fld } 0..$#F;' -- -fld="$FLD"

will print all indexes (counted from 0) or nothing...

转瞬即逝 2024-11-15 23:55:10

awk oneliner,单进程:

awk -F, '/17687/{n=NF;sub(".*,17687,","");print n-NF}' file

对于大文件,请使用闪电般快速的 mawk(如果您的平台上可用)。

Awk oneliner, single process:

awk -F, '/17687/{n=NF;sub(".*,17687,","");print n-NF}' file

For large files use the lightning fast mawk if available on your platform.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文