Unix Shell:搜索文件并追加其最后一次出现

Unix Shell:搜索文件并追加其最后一次出现,shell,unix,search,awk,append,Shell,Unix,Search,Awk,Append,我正在尝试搜索文件中的给定文本,并查找其最后一次出现的索引。 任务是将搜索到的索引附加到同一文件中,但附加到单独的列中。 我能够完成任务,但正在寻找更有效的解决方案 以下是详细说明: 名称\u file.txt tarun trehan vikram batra allzhere blog allzhere android apps allzhere on facebook contact updater utility help me 塔伦·特里汉 维克拉姆·巴特拉 allzhere博客 al

我正在尝试搜索文件中的给定文本,并查找其最后一次出现的索引。 任务是将搜索到的索引附加到同一文件中,但附加到单独的列中。 我能够完成任务,但正在寻找更有效的解决方案

以下是详细说明:

名称\u file.txt

tarun trehan vikram batra allzhere blog allzhere android apps allzhere on facebook contact updater utility help me 塔伦·特里汉 维克拉姆·巴特拉 allzhere博客 allzhere android应用程序 allzhere在facebook上 联系人更新实用程序 帮助我 我运行以下命令来获取临时文件(即names_searched.txt)中的结果

grep "n" names_file.txt > names_searched.txt grep“n”names_file.txt>names_searched.txt 结果如下:

tarun trehan allzhere android apps allzhere on facebook contact updater utility 12 11 11 3 塔伦·特里汉 allzhere android应用程序 allzhere在facebook上 联系人更新实用程序 现在,我运行下面的awk命令来提取“n”的最后一个索引

cat names_searched.txt|awk-F“n”{print length($0)-length($NF)}>namex_srch_idx.txt 结果如下:

tarun trehan allzhere android apps allzhere on facebook contact updater utility 12 11 11 3 12 11 11 3. 现在我粘贴文件以准备结果文件,即

paste names_searched.txt namex_srch_idx.txt > names_result.txt 粘贴名称\u searched.txt namex\u srch\u idx.txt>names\u result.txt 以下是预期结果:

tarun trehan 12 allzhere android apps 11 allzhere on facebook 11 contact updater utility 3 塔伦·特里汉12 allzhere android应用程序11 所有人都在脸书11上 联系人更新实用程序3
是否有一种解决方法,我们不需要创建临时文件,但仍然可以获得相同的结果?

您可以使用此
awk
一行程序:

awk -F"n" '{ len=length($0) - length($NF); if( len > 0 ) print $0,len }'  names_file.txt > names_result.txt
另一个
awk
费多尔基提到的一个班轮

awk -F"n" 'NF>1{print $0, length($0) - length($NF)}' names_file.txt > names_result.txt

您可以使用此
awk
一个班轮:

awk -F"n" '{ len=length($0) - length($NF); if( len > 0 ) print $0,len }'  names_file.txt > names_result.txt
另一个
awk
费多尔基提到的一个班轮

awk -F"n" 'NF>1{print $0, length($0) - length($NF)}' names_file.txt > names_result.txt

您可以使用此
awk
一个班轮:

awk -F"n" '{ len=length($0) - length($NF); if( len > 0 ) print $0,len }'  names_file.txt > names_result.txt
另一个
awk
费多尔基提到的一个班轮

awk -F"n" 'NF>1{print $0, length($0) - length($NF)}' names_file.txt > names_result.txt

您可以使用此
awk
一个班轮:

awk -F"n" '{ len=length($0) - length($NF); if( len > 0 ) print $0,len }'  names_file.txt > names_result.txt
另一个
awk
费多尔基提到的一个班轮

awk -F"n" 'NF>1{print $0, length($0) - length($NF)}' names_file.txt > names_result.txt

甚至是
awk-F“n”NF>1{print$0,length($0)-length($NF)}文件
。因此,没有“n”的行将有NF==1,因此不会打印。谢谢大家…这就像一个符咒。然而,我面临着另一个问题,即names_file.txt的数据格式如下:111 | aaa | 555 | tarun trehan。。。我只需要在名称列中搜索最后一次出现的内容,并打印索引,即111 | aaa | 555 | tarun trehan | 12。。。关于那件事的任何线索。。。我尝试了管道结果,但没有通过……试试这个:
awk-F“n”NF>1{n=split($0,lnames,”);print lnames[n],length($0)-length($NF)}
Sat,这给了我一个输出:trehan 24而不是111 | aaa | 555 | tarun trehan 12。。。我试过这个猫名为| file.txt | awk-F“|”{print$4}}| awk-F“n”'NF>1{print$0”|“length($0)-length($NF)}”。。但这给了我12岁的塔伦·特里汉。。。有没有办法从第一个awk访问$0并只在$4中搜索它???@Allzhere,使用以下命令:
awk-F“|”'$4~/n/{n=split($4,arr,“n”);print$0“|”length($4)-length(arr[n])name_file.txt
甚至
awk-F“n”'NF>1{print$0,length($0)-length($NF}文件
。因此,没有“n”的行将有NF==1,因此不会打印。谢谢大家…这就像一个符咒。然而,我面临着另一个问题,即names_file.txt的数据格式如下:111 | aaa | 555 | tarun trehan。。。我只需要在名称列中搜索最后一次出现的内容,并打印索引,即111 | aaa | 555 | tarun trehan | 12。。。关于那件事的任何线索。。。我尝试了管道结果,但没有通过……试试这个:
awk-F“n”NF>1{n=split($0,lnames,”);print lnames[n],length($0)-length($NF)}
Sat,这给了我一个输出:trehan 24而不是111 | aaa | 555 | tarun trehan 12。。。我试过这个猫名为| file.txt | awk-F“|”{print$4}}| awk-F“n”'NF>1{print$0”|“length($0)-length($NF)}”。。但这给了我12岁的塔伦·特里汉。。。有没有办法从第一个awk访问$0并只在$4中搜索它???@Allzhere,使用以下命令:
awk-F“|”'$4~/n/{n=split($4,arr,“n”);print$0“|”length($4)-length(arr[n])name_file.txt
甚至
awk-F“n”'NF>1{print$0,length($0)-length($NF}文件
。因此,没有“n”的行将有NF==1,因此不会打印。谢谢大家…这就像一个符咒。然而,我面临着另一个问题,即names_file.txt的数据格式如下:111 | aaa | 555 | tarun trehan。。。我只需要在名称列中搜索最后一次出现的内容,并打印索引,即111 | aaa | 555 | tarun trehan | 12。。。关于那件事的任何线索。。。我尝试了管道结果,但没有通过……试试这个:
awk-F“n”NF>1{n=split($0,lnames,”);print lnames[n],length($0)-length($NF)}
Sat,这给了我一个输出:trehan 24而不是111 | aaa | 555 | tarun trehan 12。。。我试过这个猫名为| file.txt | awk-F“|”{print$4}}| awk-F“n”'NF>1{print$0”|“length($0)-length($NF)}”。。但这给了我12岁的塔伦·特里汉。。。有没有办法从第一个awk访问$0并只在$4中搜索它???@Allzhere,使用以下命令:
awk-F“|”'$4~/n/{n=split($4,arr,“n”);print$0“|”length($4)-length(arr[n])name_file.txt
甚至
awk-F“n”'NF>1{print$0,length($0)-length($NF}文件
。因此,没有“n”的行将有NF==1,因此不会打印。谢谢大家…这就像一个符咒。然而,我面临着另一个问题,即names_file.txt的数据格式如下:111 | aaa | 555 | tarun trehan。。。我只需要在名称列中搜索最后一次出现的内容,并打印索引,即111 | aaa | 555 | tarun trehan | 12。。。关于那件事的任何线索。。。我尝试了管道结果,但没有通过……试试这个:
awk-F“n”NF>1{n=split($0,lnames,”);print lnames[n],length($0)-length($NF)}
Sat,这给了我一个输出:trehan 24而不是111 | aaa | 555 | tarun trehan 12。。。我试过这个猫名为| file.txt | awk-F“|”{print$4}}| awk-F“n”'NF>1{print$0”|“length($0)-length($NF)}”。。但这给了我12岁的塔伦·特里汉。。。有没有办法从first awk和search onl访问$0