我忽略了这段代码的问题是什么?
#! /bin/bash
File1=$1
for (( j=1; j<=3; j++ ))
{
output=$(`awk -F; 'NR=='$j'{print $3}' "${File1}"`)
echo ${output}
}
File1看起来像这样:
Char1;2;3;89
char2;9;6;66
char5;3;77;8
我想在每一行上提取字段3
所以结果将是
3
6
7
答案 0 :(得分:5)
应该是这样的:
#! /bin/bash
File1=$1
for (( j=1; j<=3; j++ ))
{
output=$(awk -F ';' 'NR=='$j' {print $3}' "${File1}")
echo ${output}
}
它在我的CentOS上运行良好。
答案 1 :(得分:1)
-v
标记的情况下在awk脚本中使用bash变量只需:
awk -F";" '{print $3}' "${file1}"
将完全执行您的整个脚本现在尝试执行的操作。
答案 2 :(得分:1)
更简单,使用cut
实用程序:cut -d';' -f3
将生成您要查找的结果,其中-d
指定要使用的分隔符,-f
字段/您正在寻找的列(1索引)。
答案 3 :(得分:1)
如果您只是想从结构化文件中提取一个列,请使用cut
实用程序。
cut
将允许您指定数据中的分隔符(;
)以及您要提取的列(第3列)。
cut -d';' -f3 "$file1"
如果您希望循环显示结果,请逐个使用while
循环和read
值:
cut -d';' -f3 "$file1" |
while read data; do
echo "data is $data"
done
您是否需要变量中的值,请执行此操作
var=$( cut -d';' -f3 "$file1" | tr '\n' ' ' )
tr '\n' ' '
位用空格替换换行符,因此您可以将3 6 77
作为字符串。
让他们进入一个阵列:
declare -a var=( $( cut -d';' -f3 "$file1" ) )
(此处不需要tr
)
然后,您可以访问${var[0]}
,${var[1]}
等值。