我有这样的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
但它不起作用,登录的内容不是我想要的。
答案 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