【问题标题】:Making bash output a certain word from a .txt file让 bash 从 .txt 文件中输出某个单词
【发布时间】:2018-11-17 12:47:17
【问题描述】:

我有一个关于 Bash 的问题:

正如标题所说,我需要 bash 输出某个单词,具体取决于它在文件中的位置。在我的明确示例中,我有一个简单的 .txt 文件。

我已经发现你可以用命令来计算文件中的单词数:

wc -w < myFile.txt

一个输出示例是:

78501

当然还有一种方法可以让“cat”只显示单词编号 x。比如:

cat myFile.txt | wordno. 3125
desired-word

请注意,我欢迎任何可以完成此任务的命令,而不仅仅是 cat。

作为替代或补充,我很高兴知道如何根据文件中的某些角色在文件中显示它们的位置。比如:

cat myFile.txt | characterno. 2342
desired-character

我已经知道如何使用变量来实现这一点:

a="hello, how are you"
echo ${a:9:1}
w

唯一的问题是变量只能这么长。是不是只要一整个.txt文件就不行了。

期待你的回答!

【问题讨论】:

  • 抱歉,不清楚,请添加更多信息,然后告诉我们?

标签: bash


【解决方案1】:

你可以使用awk这个作业,它在空格处分割字符串并打印$wordnumber字符串部分和tr用于删除换行符

cat myFile.txt | tr -d '\n' | awk -v wordnumber=5 '{ print $wordnumber }'

如果你想要例如 5th。角色你可以这样做

head -c 5 myFile.txt | tail -c 1

【讨论】:

  • @wiomoc,你不需要使用这么多命令,awk可以轻松处理。 awk 可以读取文件本身。
  • 注意:您可以使用tr -d '\n' &lt; myFile.txt | awk ...。所有 shell 都支持输入重定向。除此之外,除非这些行包含在您想要的输入文件中 tr '\n' ' ' 而不是 -d
【解决方案2】:

由于您没有显示 Input_file 样本或预期输出,因此无法对其进行测试。您可以简单地使用awk 执行此操作,如下示例。

awk 'FNR==1{print substr($0,2342,1);next}' Input_file

我们告诉awk 寻找第一行FNR==1substr 我们告诉awk 取字符2342 和下一个1 意味着从那个位置你可以只取1 个字符根据您的需要增加或保留它的价值。

【讨论】:

    【解决方案3】:

    呆呆的:

    awk 'BEGIN{RS="[[:space:]]+"} NR==12345' file
    

    gawk 'NR==12345' RS="[[:space:]]+" file
    

    我将记录分隔符设置为包含换行符的空格序列,然后打印12345th记录。

    为了提高平均性能,您可以在找到匹配项后退出脚本:

    gawk 'BEGIN{RS="[[:space:]]+"}NR==12345{print;exit}' file
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      • 2013-10-09
      • 1970-01-01
      相关资源
      最近更新 更多