相关疑难解决方法(0)

如何在Bash中的分隔符上拆分字符串?

我把这个字符串存储在一个变量中:

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)

我不一定需要ADDR1ADDR2变量.如果它们是阵列的元素甚至更好.


根据以下答案的建议,我最终得到了以下内容,这就是我所追求的:

#!/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它工作.

bash shell scripting split

1885
推荐指数
22
解决办法
204万
查看次数

如何在awk脚本中使用shell变量?

我找到了一些办法通过外壳变量的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)

我对此感到困惑.

bash shell awk

260
推荐指数
5
解决办法
46万
查看次数

awk是否支持动态的用户定义变量?

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中实现我的目的?

bash awk dynamic

5
推荐指数
2
解决办法
6990
查看次数

在awk中使用shell变量

我是新手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)

bash shell scripting awk sh

2
推荐指数
1
解决办法
2259
查看次数

标签 统计

bash ×4

awk ×3

shell ×3

scripting ×2

dynamic ×1

sh ×1

split ×1