[英]Extract & store Strings with uneven spaces using AWK
我有一个包含如下数据的文件。 我想剪切第一列和最后一列并存储在变量中。 我可以使用命令“ awk -F" {2,}" '{print $1,$NF}' filename.txt
” awk -F" {2,}" '{print $1,$NF}' filename.txt
它,但是我无法使用awk -v
命令将其存储在变量中。
主要问题是第一列包含单词之间的空间,如果我使用awk -v
命令, awk
将其awk
3列。
请建议我如何实现这一目标。
在执行awk代码之前,将对-v VAR=value
参数进行求-v VAR=value
。 它实际上不是代码的一部分,因此您不能引用字段,因为它们尚不存在。 而是在代码中设置变量:
awk '{ Lang=$1; Last=$NF; print Lang, Last; }'
同样,在awk中设置这些变量不会影响bash的变量。 环境是分层的-每个子环境都从父环境继承某些状态,但是它永远不会向上流动。 从孩子那里获得状态的唯一方法是让孩子以父母可以处理的格式打印它。 例如,您可以while read LANG LAST; do ...; done
将上述命令传递给while read LANG LAST; do ...; done
while read LANG LAST; do ...; done
while read LANG LAST; do ...; done
将awk输出读取为变量。
从您的评论看来,您试图以一种不太有意义的方式来混合awk和shell。 因此,正确的完整代码(用于在bash循环中获取变量)将是:
cat loc.txt | awk '{ Lang=$1; Last=$NF; print Lang, Last; }' | while read LANG LAST; do ...; done
或者,如果它是固定数量的字段,则可以完全跳过awk:
cat loc.txt | while read LANG _ _ _ _ LAST; do ...; done
其中“ _”仅代表已创建并忽略的变量。 下划线表示某些编程语言中的占位符是一个约定,在这种情况下,它实际上是一个可以用echo $_
打印的变量。 如果您关心中间值,则可以给它起一个真实的名称,并为每个字段取不同的名称。
这些解决方案都不在乎有多少空白。 除非您告知,否则Awk不会在乎,shell也不会。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.