Arrays 捕获特定数组列并将其写入文件
我有一个包含如下数据的数组:Arrays 捕获特定数组列并将其写入文件,arrays,bash,perl,if-statement,awk,Arrays,Bash,Perl,If Statement,Awk,我有一个包含如下数据的数组: ( "10.1.1.1 api sd1", "10.1.1.1 lst sd2" ) 是否有可能从数组中提取每行第二列中的元素并将其放入文件中?例如,在上述情况下,预期结果为: api lst 您可以迭代数组并使用read捕获每个数组条目中的第二列: ARRAY1=( "10.1.1.1 api sd1" "10.1.1.1 lst sd2" ) for i in "${ARRAY1[@]}"; do read -r _ b _ <<<
( "10.1.1.1 api sd1", "10.1.1.1 lst sd2" )
是否有可能从数组中提取每行第二列中的元素并将其放入文件中?例如,在上述情况下,预期结果为:
api
lst
您可以迭代数组并使用
read
捕获每个数组条目中的第二列:
ARRAY1=( "10.1.1.1 api sd1" "10.1.1.1 lst sd2" )
for i in "${ARRAY1[@]}"; do
read -r _ b _ <<< "$i"
echo "$b"
done > out.log
cat out.log
api
lst
ARRAY1=(“10.1.1.1 api sd1”“10.1.1 lst sd2”)
对于“${ARRAY1[@]}”中的i;做
在bash中以另一种方式读取-r\b
ARRAY=( "10.1.1.1 api sd1" "10.1.1.1 lst sd2" )
for i in "${ARRAY[@]}"; do
set -- $i
echo "$2"
done
此方法更适合于包含大量字段的文件,因为您可以简单地选择所需字段,而无需创建大量变量。请尝试下面的perl脚本:
Perl代码:
use strict;
use warnings;
my @array = ("10.1.1.1 api sd1", "10.1.1.1 lst sd2");
my @columns = ();
foreach my $result (@array)
{
@columns = split /\s/, $result;
print $columns[1] . "\n";
}
Perl一行程序:
use strict;
use warnings;
my @array = ("10.1.1.1 api sd1", "10.1.1.1 lst sd2");
my @columns = ();
foreach my $result (@array)
{
@columns = split /\s/, $result;
print $columns[1] . "\n";
}
如果将数组元素放入输入文件(input),那么使用perl one liner我们可以执行以下操作
perl -lane "print $F[1]" Input
我尝试了类似的方法,但没有:read-r\b\uyes基本上是下划线,用于忽略第一个值和第二列之后的所有值。如果您也需要这些值,请使用:read-rab rest Yesawk'{print$2}“是的,正如我写的awk
也可以用来代替read
,如果取出read
使其更可读:)