所以目前我想将一个大文本文档中的单个值应用到一个变量中,稍后在我的bash脚本中应用它们。
初始文本文件并不重要,但它在十几个其他人中有一行,其内容如下:
x,y,z: 2000 2000 500
x,y,z对于文件是唯一的,因此我可以使用grep轻松地抓住这一行
grep x,y,z textfile.txt > xyz.txt
然后我只用awk制作一个文件
awk '{print $4}' xyz.txt > awkoutput.txt
然后我只是用cat将它应用于变量
ZDIM=$(cat "awkoutput.txt")
稍后将使用ZDIM指示计算到另一个文本文件。这可行,但我有点bash新手,并想知道是否有一个更优雅的方式来写这个而不是创建一堆我需要稍后的文本文件。
答案 0 :(得分:1)
是。 awk
完全能够执行正则表达式匹配,因此您可以删除grep
:
awk '/x,y,z/ {print $4}' textfile.txt
将awk
的输出写入文件,然后捕获cat
的输出之间没有区别;并简单地捕获awk
的输出。所以你可以使用
ZDIM=$(awk '/x,y,z/ {print $4}' textfile.txt)
即使awk
无法进行正则表达式匹配,并且cat
在某种程度上是必要的,您也可以使用管道而不是创建临时文件。
ZDIM=$(grep x,y,z textfile.txt | awk '{print $4}' | cat)
答案 1 :(得分:0)
如果您知道在线上有四列,最后三列是数字,您可以将grep输出抓取到变量。
因此,例如在perl样式的正则表达式中使用-P
,我们得到环视断言以丢弃部分输出,-o
仅输出匹配:
ZDIM=$(grep -oP 'x,y,z: \d+ \d+ \K\d+')
其中读取:grep字符串x,y,z:
后跟两组数字,然后只抓取第三位数分组,然后只输出匹配。