谁可以使用bash从文本文件中获取/复制特定单词



当我这样做时:

LINE=$(head -38 fine.txt | tail -1 | cut -f2)

我得到了文件的第38行,它是:

Xres  = 1098

但我只需要记录1098作为变量的值。

我正在接受阅读文本文件和记录值的培训,并在稍后的脚本中使用它们作为参数。

| awk '{print $3}'添加到管道中。

sed -n '38s/.*= *//p' fine.txt

默认情况下,sed打印每个输入行。-n选项将禁用此行为。38选择第38行,当看到这一行时,替换会将直到最后一个等号的所有内容都不替换,并打印。

这是假设第二个字段是最后一个字段。如果输入行比我假设的更复杂,请尝试替换s/^[^t]*t[^t]*= *//p。如果sed不将t识别为制表符,则需要提供文字制表符(在某些shell中,可以使用键序列ctrl-v制表符输入一个制表符)。

如果输入文件很大,您可能需要重构sed脚本以在第38行之后退出。

结束了,这让我们

LINE=$(sed -n '38!b;s/^[^t]*t[^t]*= *//p;q' fine.txt)

然而,这变得有些复杂,以至于阻碍了易读性和可维护性。Awk中的内容更具可读性;

awk -F 't' 'NR==38 { sub(/.*= */,"",$2); print $2; exit 0 }' fine.txt

更普遍地说,您可能希望在选项卡上进行拆分,然后在空格上进行拆分。以下更精确地实现cut -f2 | awk '{ print $3 }'

awk -F 't' 'NR==38 { split($2,f); print f[3]; exit 0 }' fine.txt

选项-F 't'将选项卡设置为输入字段分隔符。条件NR==38选择第38行,split($2,f)将空格上的第二个制表符分隔字段拆分为数组f。然后我们简单地打印fexit的第三个元素。

相关内容

  • 没有找到相关文章

最新更新