我把这个字符串存储在一个变量中:
IN="bla@some.com;john@home.com"
Run Code Online (Sandbox Code Playgroud)
现在我想通过;分隔符拆分字符串,以便我有:
ADDR1="bla@some.com"
ADDR2="john@home.com"
Run Code Online (Sandbox Code Playgroud)
我不一定需要ADDR1和ADDR2变量.如果它们是阵列的元素甚至更好.
根据以下答案的建议,我最终得到了以下内容,这就是我所追求的:
#!/usr/bin/env bash
IN="bla@some.com;john@home.com"
mails=$(echo $IN | tr ";" "\n")
for addr in $mails
do
echo "> [$addr]"
done
Run Code Online (Sandbox Code Playgroud)
输出:
> [bla@some.com]
> [john@home.com]
Run Code Online (Sandbox Code Playgroud)
有一个涉及设置Internal_field_separator(IFS)的解决方案;.我不确定该答案发生了什么,你如何重置IFS为默认值?
RE:IFS解决方案,我试过这个并且它可以工作,我保持旧的IFS然后恢复它:
IN="bla@some.com;john@home.com"
OIFS=$IFS
IFS=';'
mails2=$IN
for x in $mails2
do
echo "> [$x]"
done
IFS=$OIFS
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我试过的时候
mails2=($IN)
Run Code Online (Sandbox Code Playgroud)
我只是在循环打印时得到第一个字符串,没有括号围绕$IN它工作.
我找到了一些办法通过外壳变量的awk脚本,但我感到困惑'和".
首先,我尝试使用shell脚本:
$ v=123test
$ echo $v
123test
$ echo "$v"
123test
Run Code Online (Sandbox Code Playgroud)
然后尝试了awk:
$ awk 'BEGIN{print "'$v'"}'
$ 123test
$ awk 'BEGIN{print '"$v"'}'
$ 123
Run Code Online (Sandbox Code Playgroud)
为什么有区别?
最后我试过这个:
$ awk 'BEGIN{print " '$v' "}'
$ 123test
$ awk 'BEGIN{print ' "$v" '}'
awk: cmd. line:1: BEGIN{print
awk: cmd. line:1: ^ unexpected newline or end of string
Run Code Online (Sandbox Code Playgroud)
我对此感到困惑.
awk支持这个:
awk '{print $(NF-1);}'
Run Code Online (Sandbox Code Playgroud)
但不适用于用户定义的变量:
awk '{a=123; b="a"; print $($b);}'
Run Code Online (Sandbox Code Playgroud)
顺便说一下,shell支持这个:
a=123;
b="a";
eval echo \${$b};
Run Code Online (Sandbox Code Playgroud)
如何在awk中实现我的目的?
我是新手awk,需要一些帮助
这很有效
awk '{
for(i =0;i<10;i++){
if ($27 == 'addr1') {
print >"temp.csv"
}
}
}' /tmp/input.csv
Run Code Online (Sandbox Code Playgroud)
我在下面试过并且不工作,如何将计数值从外部传递给awk命令
count=10
echo $count
awk '{
for(i =0;i<count;i++){
if ($27 == 'addr1') {
print >"temp.csv"
}
}
}' /tmp/input.csv
Run Code Online (Sandbox Code Playgroud)