我想从名为datax.txt
的文件中提取第二行:
0/0/0/0/0/0 | 0/0/0/0/0/0 | 0/0/0/0/0/0
然后我想将3个序列0/0/0/0/0/0
存储在3个变量中。
我应该怎么做?
答案 0 :(得分:3)
将第二行读入变量a
,b
和c
。
read a b c <<< $(awk -F'|' 'NR==2{print $1 $2 $3}' datax)
答案 1 :(得分:1)
关键是将问题分成两部分:
cut
是其中之一对于将来的问题,请确保包括更完整的数据集,这是目前的数据集。我对第二行进行了一些更改,以便我们可以验证是否获得了正确的列:
f.txt
4/4/4/4/4/4 | 4/4/4/4/4/4 | 4/4/4/4/4/4
0/0/0/0/a/0 | 0/0/0/0/b/0 | 0/0/0/0/c/0
8/8/8/8/8/8 | 8/8/8/8/8/8 | 8/8/8/8/8/8
8/8/8/8/8/8 | 8/8/8/8/8/8 | 8/8/8/8/8/8
然后基于上述两个关键操作构建适当的脚本:
extract.bash
file=$1
target_line=2
# get the n-th line
# https://stackoverflow.com/questions/6022384/bash-tool-to-get-nth-line-from-a-file
line=$(cat $file | head -n $target_line | tail -1)
# get the n-th field on a line, using delimiter '|'
var1=$(echo $line | cut --delimiter='|' --fields=1)
echo $var1
var2=$(echo $line | cut --delimiter='|' --fields=2)
echo $var2
var3=$(echo $line | cut --delimiter='|' --fields=3)
echo $var3
aaand:
$ ./extract.bash f.txt
0/0/0/0/a/0
0/0/0/0/b/0
0/0/0/0/c/0
答案 2 :(得分:0)
请尝试以下操作:
IFS='|' read a b c < <(sed -n 2P < datax | tr -d ' ')
然后将变量a,b和c分配给第二行的每个字段。
答案 3 :(得分:0)
您可以使用sed打印文件的特定行,因此对于您的示例,在第二行:
sed -n -e 2p ./datax
将sed的输出设置为变量:
Var=$(sed -n -e 2p ./datax)
然后将字符串分成所需的3个变量:
A="$(echo $Var | cut -d'|' -f1)"
B="$(echo $Var | cut -d'|' -f2)"
C="$(echo $Var | cut -d'|' -f3)"