将字符串var存储在awk命令中

时间:2015-06-08 13:21:19

标签: bash variables awk

我有这样的txt文件:

Dupont Charles
Martin Paul
Dupuis Jean

对于每一行,我希望对每个名称的前2个字符进行登录。 例如:Dupont Charles ==>杜赫

awk '{print tolower(substr($1,1,1)substr($2,1,1))}' liste.txt

完美无缺。

但是我希望将每个登录存储在var中并使用该var调用bash脚本(uscript)...

awk '{login=tolower(substr($1,1,1)substr($2,1,1));print $login; script1 $login; }' liste.txt

但它不起作用,登录的内容不是我想要的。

2 个答案:

答案 0 :(得分:2)

awk中使用变量的方法与Bash不同。在awk中,变量没有前导$。所以你想说的是:

awk '{login=tolower(substr($1,1,1)substr($2,1,1));print login; }' liste.txt
#                                                       ^
#                                                 intead of $login

但是,您愿意使用具有此值的脚本script1。为此,您可能希望使用system()来调用外部命令...............或使用while块来处理所有内容。

while IFS= read -r name surname
do
    login=${name:0:2}${surname:0:2}
    script1 "$login"  
done < file

这使用相同的逻辑来获取变量的3个第一个字符:

$ v="123456789"
$ echo ${v:0:3}
123

答案 1 :(得分:1)

awk '{print tolower(substr($1,1,2)substr($2,1,2))}' liste.txt | xargs script1

e.g。使用echo代替script1,我当然不会:

$ awk '{print tolower(substr($1,1,2)substr($2,1,2))}' liste.txt | xargs echo
duch mapa duje

script1一次需要1个arg:

awk '{print tolower(substr($1,1,2)substr($2,1,2))}' liste.txt | xargs -n1 script1

e.g。

$ awk '{print tolower(substr($1,1,2)substr($2,1,2))}' liste.txt | xargs -n1 echo
duch
mapa
duje